繁体   English   中英

如何在matplotlib中将轴尺寸从像素更改为长度? 一般有什么代码吗?

[英]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的像素数? 如果是,请使用imshowextent关键字:

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数据dxy轴上的单位是像素数。 例如,在下面的示例中,我们看到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进行插值以提供更平滑的图像(这可能会隐藏光谱中的特征),其次,因为它是图像,因此没有有意义的xy数据,因此不会对其进行绘制。

最好的替代方法是使用plt.pcolormesh生成2D数组的伪彩色图,并以XY作为参数,它们都是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)

在此处输入图片说明

现在, xy值对应于XY的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM