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

Python 如何在matplotlib中将轴尺寸从像素更改为长度?一般来说有代码吗?,python,matplotlib,Python,Matplotlib,因为完整的模拟太大了,所以只给出了绘制光谱的代码(我认为这就足够了) 该光谱以像素为单位。但我想用长度单位来表示。我希望你能给我一些建议 我猜您的问题出在哪里,所以让我们先说明一下我的解释/您有一些二维数据d,可以使用imshow进行绘制,x和y轴上的单位是像素数。例如,在下面的示例中,我们可以看到标记为0->10的x轴,表示数据点的数量: import numpy as np import matplotlib.pyplot as plt # Generate a fake d x = np

因为完整的模拟太大了,所以只给出了绘制光谱的代码(我认为这就足够了)


该光谱以像素为单位。但我想用长度单位来表示。我希望你能给我一些建议

我猜您的问题出在哪里,所以让我们先说明一下我的解释/您有一些二维数据
d
,可以使用
imshow
进行绘制,
x
y
轴上的单位是像素数。例如,在下面的示例中,我们可以看到标记为0->10的
x
轴,表示数据点的数量:

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

的值,您的意思是希望轴刻度显示自定义尺寸,而不是
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
?只需使用
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')