在matplotlib中平滑外边缘
我有两个问题,希望有人能帮我。
我想用等高线图绘制一个立体投影,并且想在Matplotlib中给Z轴上高的部分上色。
我在使用meshgrid和griddata之前先用contourf绘图,但边缘看起来不够平滑,我该怎么让它们更平滑呢?
我想在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)