我正在尝试使用matplotlib绘制 2D字段数据。所以基本上我想要类似的东西:
在我的实际情况中,我将数据存储在我的硬盘上的文件中。但是为简单起见,考虑函数z = f(x,y)。我想要一个平滑的2D绘图,其中z使用颜色可视化。我使用以下代码行管理绘图:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 21)
y = np.linspace(-1, 1, 21)
z = np.array([i*i+j*j for j in y for i in x])
X, Y = np.meshgrid(x, y)
Z = z.reshape(21, 21)
plt.pcolor(X, Y, Z)
plt.show()
然而,我获得的情节非常粗糙。是否有一种非常简单的方法来平滑情节?我知道surface
图可能有类似的东西,但是,这些是3D。我可以改变相机角度以获得2D表示,但我确信有一种更简单的方法。我也试过了imshow
但是我必须在graphic
坐标处思考原点位于左上角的位置。
问题已解决
我设法使用以下方法解决了我的问题:
plt.imshow(Z,origin='lower',interpolation='bilinear')
答案 0 :(得分:6)
如果您无法更改网格粒度,请尝试使用imshow
,这将基本上将任何2D矩阵绘制为图像,其中每个矩阵单元格的值表示制作该像素的颜色。使用您的示例值:
In [3]: x = y = np.linspace(-1, 1, 21)
In [4]: z = np.array([i*i+j*j for j in y for i in x])
In [5]: Z = z.reshape(21, 21)
In [7]: plt.imshow(Z, interpolation='bilinear')
Out[7]: <matplotlib.image.AxesImage at 0x7f4864277650>
In [8]: plt.show()
答案 1 :(得分:4)
您可以使用contourf
plt.contourf(X, Y, Z)
编辑:
对于更多级别(更平滑的颜色过渡),您可以使用更多级别(轮廓)
例如:
plt.contourf(X, Y, Z, 100)