在matplotlib中平滑外边缘

1 投票
1 回答
1174 浏览
提问于 2025-04-18 10:21

我有两个问题,希望有人能帮我。

我想用等高线图绘制一个立体投影,并且想在Matplotlib中给Z轴上高的部分上色。

  1. 我在使用meshgrid和griddata之前先用contourf绘图,但边缘看起来不够平滑,我该怎么让它们更平滑呢?
    enter image description here

  2. 我想在Z轴上使用对数刻度,我该怎么做?我试过使用ticker.LogLocator,但结果只是有些部分被上色了。

这是我的代码:

# craation of a 2D grid
xi = np.linspace(min(X), max(X))
yi = np.linspace(min(Y), max(Y))

X1, Y1 = np.meshgrid(xi, yi)

##### interpolation
Z1 = griddata(X, Y, Z,xi,yi)

plt.contourf(X1,Y1,Z1,50,cmap=plt.cm.rainbow,vmax=abs(Z1).max(),
             locator=ticker.LogLocator)

plt.colorbar()

plt.xlim(-1,1)
plt.ylim(-1,1)

plt.show()
plt.set_zscale('log')
plt.set_xlabel('X')
plt.set_ylabel('Y')

plt.show()

1 个回答

0

回答第一个问题:

你可以通过以下方式来平滑轮廓值:

zmin = Z1.min()
zmax=Z1.max()
levels=linspace(zmin, zmax, 400)

然后把 levels 作为参数传递给 plt.contourf()

要平滑外边缘,你需要在你的二维网格中使用更多的值,这可以通过在使用 linspace() 时传递你想要的值的数量来实现:

nx = 1000
ny = 1000
xi = np.linspace(min(X), max(X), nx)
yi = np.linspace(min(Y), max(Y), ny)

撰写回答