Matplotlib imshow:数据轮换了吗? [英] Matplotlib imshow: Data rotated?
问题描述
我试图用散点图绘制一些数据.我的代码是
I was trying to plot some data with scatter. My code is
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()
结果是
现在,我开始尝试用一些数据显示,因为我不喜欢分散的圈子.所以我尝试了
Now I came on the idea to try imshow with the some data, soince I didn't like the circles of scatter. So I tried this
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()
结果如下:
我的问题很明显为什么 imshow()
会反转数据?到底发生了什么?
My problem is obviosly why imshow()
does invert the data? What happens here exactly?
PS:以下是数据,以防有人想玩与他们
PS: Here are the data, in case someone would like to play with them
推荐答案
查看 imshow
的关键字参数.有 origin
.默认值为上",但您希望为下".
Look at the keyword arguments of imshow
. There is origin
. The default is "upper", but you want "lower".
默认设置对于绘制图像是有意义的,通常从左上角开始.对于大多数矩阵绘图,您需要 origin="lower"
The default makes sense for plotting images, that usually start at the top-left corner. For most matrix-plotting, you'll want origin="lower"
这篇关于Matplotlib imshow:数据轮换了吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!