22

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

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

结果是 在此处输入图像描述

现在我有了用一些数据尝试 imshow 的想法,因为我不喜欢分散的圆圈。所以我尝试了这个

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()反转数据?这里到底发生了什么?

PS:这是数据,以防有人想和他们一起玩

4

4 回答 4

44

查看 的关键字参数imshow。有origin。默认值为“上”,但您想要“下”。

默认值对于绘制图像很有意义,通常从左上角开始。对于大多数矩阵绘图,您需要origin="lower"

于 2013-01-14T14:22:25.277 回答
4

不是倒置,只是翻转。默认的原点imshow在左上角而不是左下角。imshow有一个参数来指定原点,它被命名为原点。或者,您可以在matplotlib.conf.

于 2013-01-14T14:22:07.227 回答
2

考虑使用pcolormesh或者contourf如果你想绘制表单的数据f(X, Y) = Zimshow简单地绘制数据Z,缩放和重新采样确实是手动完成的。

于 2015-07-18T13:14:22.060 回答
1

顺便说一句,您可以使用 marker='s' 在散点图中绘制正方形而不是圆形,然后保留原始代码。

于 2015-01-09T19:03:43.583 回答