我想制作一个等高线图,使用matplotlib绘制特定的等高线,重要的代码如下:
levels = [-5, -3,-2,-1, 0,1, 2,5,10,17.5]
cax = ax1.contourf(X,Y,Z,levels)
#some similar code
最后,等高线图的比例是下图所示的,但是,我不喜欢(-5,0)之间的等高线变成仅深蓝色和紫色的变体,我怎样才能使颜色比例更加多样化,无需更改比例?
cm.PRGrn
)ax.contour(...)
绘制跨越不同级别边界的等高线ax.contourf(...)
,而是使用 ax.imshow(...)
和 ax.contour(...)
的组合,如右侧子图中所示;注意两个颜色条的差异。这是用于生成顶部图形的代码。
Matplotlib 的示例 建议使用在填充轮廓对象中重新计算的精确
levels
;另请注意 extend='both'
参数中的 ax.contourf
。
ax.imshow
的代码相对简单,请注意使用 extent
来获得正确的轴限制,并使用 origin='lower'
来使 y 轴向上。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
x = y = np.linspace(-2, 2, 81)
X, Y = np.meshgrid(x, y)
Z = 5*X + 4*Y + 4 - 2
levels = [-5, -3, -2, -1, 0, 1, 2, 5, 10, 17.5]
extent = (-2, 2, -2, 2)
cmap = cm.PRGn
fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(11, 4), layout='constrained')
cf0 = ax0.contourf(X, Y, Z, levels=levels, cmap=cmap, extend='both')
cc0 = ax0.contour( X, Y, Z, levels=cf0.levels, colors='k')
cl0 = ax0.clabel(cc0)
cb0 = fig.colorbar(cf0, ax=ax0)
ax0.set_aspect(1)
im1 = ax1.imshow(Z, extent=extent, origin='lower', cmap=cmap)
cc1 = ax1.contour(Z, levels, colors='k', origin='lower', extent=extent)
cl1 = ax1.clabel(cc1)
cb1 = fig.colorbar(im1, ax=ax1)
plt.show()