[英]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.