matplotlib中如何为pcolormesh图创建离散对数colorbar(色标)
实现方法
你可以通过自定义对数间隔边界+BoundaryNorm数值映射的方式实现离散对数色标,修改后的代码如下:
import numpy as np import matplotlib.pyplot as plt import matplotlib.colors as mcolors # 自定义对数间隔的色阶边界,可根据需求调整分段数量、边界数值 # 示例为0.01到100按10的幂次划分,共4个离散色段 log_bounds = np.logspace(-2, 2, 5) # 加载colormap,颜色数量和色段数量匹配 cmap = plt.get_cmap('viridis', len(log_bounds) - 1) # 替换原有LogNorm为BoundaryNorm实现离散映射 plt.pcolormesh(X, Y, Z, norm=mcolors.BoundaryNorm(log_bounds, cmap.N), cmap=cmap) # 给色标设置对应对数刻度 cb = plt.colorbar(ticks=log_bounds) # 可按需修改色标标签为实际物理量名称 cb.set_label('数值') # 原有其余代码保持不变 fig = plt.gcf() fig.set_size_inches(4*2.5, 3*2.5) plt.xlabel("X", horizontalalignment='right', x=1.0) plt.ylabel("Y", horizontalalignment='right', y=1.0) plt.tight_layout() plt.show()
调整说明
- 若需要更细的离散粒度,修改
np.logspace的第三个参数即可,例如设置为9就会生成8个离散色段 - 也支持手动指定非均匀对数边界,直接写成列表形式即可,例如
log_bounds = [0.01, 0.05, 0.2, 1, 15, 100] - 若需要显示区间标签而非边界值,自行修改
cb.set_ticklabels配置即可
内容的提问来源于stack exchange,提问作者Kitchensink
相关产品推荐
相关产品推荐

