matplotlib 如何更改等高线颜色图以使其更具可读性?

lokaqttq  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(146)

我想用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)成为深蓝色和紫色的唯一变体,我如何才能使色标更多样化,而不需要改变规模?

zour9fqk

zour9fqk1#

有几样东西可以帮助你
1.使用不同的色彩Map表(例如cm.PRGrn
1.使用ax.contour(...)绘制跨不同标高边界的等高线
1.不要使用ax.contourf(...),而是ax.imshow(...)ax.contour(...)的组合,如右边的子图所示;注意两个颜色条的差异。
这是用于生成顶部图形的代码。
Matplotlib's example建议使用在填充轮廓对象中重新计算的精确levels;也注意ax.contourf的参数中的extend='both'
ax.imshow的代码相对简单,请注意使用extent来获得正确的轴限制,origin='lower'使 y 轴向上,以及(可选)使用TwoSlopeNorm使色彩Map表以零为中心并延伸到数据极值。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cm import PRGn
from matplotlib.colors import TwoSlopeNorm

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)

fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(10, 4), layout='constrained')

cf0 = ax0.contourf(X, Y, Z, levels=levels, cmap=PRGn, 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=PRGn, norm=TwoSlopeNorm(0))
cc1 = ax1.contour(Z, levels, colors='k', origin='lower', extent=extent)
cl1 = ax1.clabel(cc1)
cb1 = fig.colorbar(im1, ax=ax1)

plt.show()

相关问题