如何为z = f(x,y)绘制平滑的2D颜色图

时间:2015-05-28 14:46:36

标签: python matplotlib plot

我正在尝试使用matplotlib绘制 2D字段数据。所以基本上我想要类似的东西:

enter image description here

在我的实际情况中,我将数据存储在我的硬盘上的文件中。但是为简单起见,考虑函数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')

2 个答案:

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

enter image description here

答案 1 :(得分:4)

您可以使用contourf

plt.contourf(X, Y, Z)

enter image description here

编辑:

对于更多级别(更平滑的颜色过渡),您可以使用更多级别(轮廓)

例如:

plt.contourf(X, Y, Z, 100)

enter image description here