Matplotlib imshow:数据旋转?

2024-09-22 22:31:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用散点绘制一些数据。我的代码是

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
from scipy.interpolate import griddata
data = np.loadtxt('file1.txt')
x = data[:,0]
y = data[:,1]
z = data[:,2]
plt.scatter(x, y, c=z, s=100, cmap=mpl.cm.spectral)
cbar=plt.colorbar()
s=18
plt.ylabel(r"$a_v$", size=s)
plt.xlabel(r"$a_{\rm min}$", size=s)
plt.xlim([x.min(),x.max()])
plt.ylim([y.min(),y.max()])
plt.show()

结果是 enter image description here

现在我有了一个想法,想用一些数据来演示一下,因为我不喜欢散乱的圆圈。 所以我试过这个

from matplotlib.mlab import griddata
import matplotlib.pyplot as plt
data = np.loadtxt('file1.txt')
x = data[:,0]
y = data[:,1]
z = data[:,2]

N = 30j
extent = (min(x), max(x), min(y), max(y))

xs,ys = np.mgrid[extent[0]:extent[1]:N, extent[2]:extent[3]:N]

resampled = griddata(x, y, z, xs, ys)

plt.imshow(resampled.T, extent=extent)
s=18
plt.ylabel(r"$a_v$", size=s)
plt.xlabel(r"$a_{\rm min}$", size=s)
plt.xlim([x.min(),x.max()])
plt.ylim([y.min(),y.max()])
cbar=plt.colorbar()
plt.show()

结果是: enter image description here

我的问题显然是为什么imshow()要反转数据?这里到底发生了什么?

附:这是data,以防有人想和他们一起玩


Tags: 数据fromimportdatasizematplotlibasnp
3条回答

不是倒过来的,只是翻过来的。imshow的原点默认位于左上角,而不是左下角。imshow有一个参数来指定原点,它名为origin。或者,您可以在matplotlib.conf中设置默认值。

如果要绘制f(X, Y) = Z格式的数据,请考虑使用^{}^{}imshow只需绘制数据Z,缩放和重采样都是手动完成的。

看看imshow的关键字参数。有origin。默认值是“upper”,但您需要“lower”。

默认设置对于打印通常从左上角开始的图像是有意义的。对于大多数矩阵绘图,您需要origin="lower"

相关问题 更多 >