我正在matplotlib中用imshow绘制2D数据数组。我在尝试缩放结果图时遇到问题。数组的大小为30x1295点,但是范围的单位是:
extent = [-130,130,0,77]如果我绘制没有范围的数组,则得到正确的图,但是如果使用范围,则得到的图具有错误的方面。
这是一个非常初学者的问题,但始终是第一次:如何同时控制绘图的外观和大小?
谢谢,

亚历克斯

P.D.在正确的情况下,代码是:
imshow(np.log10(psirhoz+1e-5),origin='lower')
对于错误的一个:
imshow(np.log10(psirhoz+1e-5),origin='lower', extent =[z_ax.min(),z_ax.max(),rho_ax.min(),rho_ax.max()])
我希望这可以澄清一些事情。

最佳答案

我猜想您要在最终绘图中使用“正方形”像素吗?

例如,如果我们绘制与您相似的随机数据:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.random((30, 1295))

fig, ax = plt.subplots()
ax.imshow(data, extent=[-130,130,0,77])
plt.show()

我们将获得具有“拉伸(stretch)”像素的图像:

因此,首先,matplotlib中的“方面”是指数据坐标中的方面。这意味着我们必须跳几圈才能获得想要的东西。
import numpy as np
import matplotlib.pyplot as plt

def main():
    shape = (30, 1295)
    extent = [-130,130,0,77]

    data = np.random.random(shape)

    fig, ax = plt.subplots()
    ax.imshow(data, extent=extent, aspect=calculate_aspect(shape, extent))
    plt.show()

def calculate_aspect(shape, extent):
    dx = (extent[1] - extent[0]) / float(shape[1])
    dy = (extent[3] - extent[2]) / float(shape[0])
    return dx / dy

main()

关于python - 在显示数据而不是图像时显示。方面和范围之间的关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18784354/

10-12 19:46