10

我正在 matplotlib 中用 imshow 绘制一个二维数据数组。我在尝试缩放结果图时遇到问题。数组的大小是 30x1295 点,但以单位为单位的范围是: extent = [-130,130,0,77] 如果我绘制没有范围的数组,我会得到正确的图,但如果我使用范围,我会得到这个图有错误的方面。这是一个相当初学者的问题,但总是第一次:我如何同时控制情节的方面和大小?谢谢,

亚历克斯

PD 对于正确的情况,代码是: 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()])

我希望这能澄清一些事情。

4

2 回答 2

12

我猜你在最终情节中想要“方形”像素?

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

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()

我们将得到一个带有“拉伸”像素的图像:

在此处输入图像描述

因此,首先,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()
于 2013-09-13T12:17:04.867 回答
7

在这种情况下,pyplot.matshow()也可能有用:

from matplotlib import pyplot as plt
import numpy as np
dat = np.array(range(9)).reshape(3,3)
plt.matshow(dat)
plt.show()

结果:

在此处输入图像描述

于 2016-03-30T11:22:06.290 回答