[英]How to change the axis dimension from pixel to length in matplotlib? is there any code in general?
由於完整的仿真要在此處發布,因此只給出了繪制頻譜的代碼(我認為這足夠了)
d = i.sum(axis=2)
pylab.figure(figsize=(15,15))
pylab = imshow(d)
plt.axis('tight')
pylab.show()
該光譜以像素為單位。 但我想以長度為單位。 我希望您能給我一些建議。
您是否要讓軸刻度線顯示自定義尺寸,而不是d
的像素數? 如果是,請使用imshow
的extent
關鍵字:
import numpy
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
d = numpy.random.normal(size=(20, 40))
fig = plt.figure()
s = fig.add_subplot(1, 1, 1)
s.imshow(d, extent=(0, 1, 0, 0.5), interpolation='none')
fig.tight_layout()
fig.savefig('tt.png')
我有點想知道您的問題是什么,所以讓我們從我的解釋開始/您有一些使用imshow
繪制的2D數據d
, x
和y
軸上的單位是像素數。 例如,在下面的示例中,我們看到x
軸從0-> 10標記為數據點數:
import numpy as np
import matplotlib.pyplot as plt
# Generate a fake d
x = np.linspace(-1, 1, 10)
y = np.linspace(-1, 1, 10)
X, Y = np.meshgrid(x, y)
d = np.sin(X**2 + Y**2)
plt.imshow(d)
如果這正確地描述了您的問題,那么解決方案是避免使用旨在繪制圖像的imshow
。 首先,這將有助於imshow
進行插值以提供更平滑的圖像(這可能會隱藏光譜中的特征),其次,因為它是圖像,因此沒有有意義的x
和y
數據,因此不會對其進行繪制。
最好的替代方法是使用plt.pcolormesh
生成2D數組的偽彩色圖,並以X
和Y
作為參數,它們都是d
值所對應的點的2D數組。
例如:
# Generate a fake d
x = np.linspace(-1, 1, 10)
y = np.linspace(-1, 1, 10)
X, Y = np.meshgrid(x, y)
d = np.sin(X**2 + Y**2)
plt.pcolormesh(X, Y, d)
現在, x
和y
值對應於X
和Y
的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.