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

Aer*_*ius 7 python plot matplotlib

我正在尝试使用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()
Run Code Online (Sandbox Code Playgroud)

但是,我获得的情节非常粗糙.是否有一种非常简单的方法来平滑情节?我知道surface情节可能类似,但是,那些是3D.我可以改变相机角度以获得2D表示,但我确信有一种更简单的方法.我也尝试了imshow但是我必须考虑graphic原点位于左上角的坐标.

问题解决了

我设法解决了我的问题:

plt.imshow(Z,origin='lower',interpolation='bilinear')

tmd*_*son 9

您可以使用 contourf

plt.contourf(X, Y, Z)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

编辑:

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

例如:

plt.contourf(X, Y, Z, 100)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 这在区域之间有明显的分离。我想要一个平滑的渐变 (2认同)
  • 您可以增加级别的数量。我会更新说明 (2认同)

wfl*_*nny 8

如果您无法更改网格粒度,请尝试使用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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述