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

问题描述 投票:0回答:1

我想制作一个等高线图,使用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)之间的等高线变成仅深蓝色和紫色的变体,我怎样才能使颜色比例更加多样化,无需更改比例?

python matplotlib scale contour
1个回答
0
投票

有几件事可以帮助你

  1. 使用不同的颜色图(例如,
    cm.PRGrn
  2. 使用
    ax.contour(...)
    绘制跨越不同级别边界的等高线
  3. 根本不使用
    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()
© www.soinside.com 2019 - 2024. All rights reserved.