如何调整matplotlib的colorbar颜色范围使配色整体偏向紫色
Matplotlib调整colormap增加紫色占比方案
你当前使用的BuPu_r是蓝紫渐变的反向色卡,想要提升整体紫色占比可以用以下三种方案,按需选择即可:
方案1:直接替换为纯紫色系色卡(最简单)
不需要调整参数,直接把cmap替换为matplotlib自带的纯紫色渐变系列即可,完全没有蓝色干扰:
import matplotlib.pyplot as plt import numpy as np # Fixing random state for reproducibility np.random.seed(19680801) plt.subplot(111) # 替换为Purples_r纯紫渐变,数值越小颜色越深 plt.imshow(np.random.random((100, 100)), cmap=plt.cm.Purples_r) plt.subplots_adjust(bottom=0.1, right=0.8, top=0.9) cax = plt.axes([0.85, 0.1, 0.075, 0.8]) plt.colorbar(cax=cax) plt.show()
方案2:截断原有BuPu_r色卡,保留高占比紫色段
如果需要保留少量蓝色渐变,仅提升紫色占比,可以截取BuPu_r的紫色色段,丢弃偏蓝的浅色部分:
import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import ListedColormap # Fixing random state for reproducibility np.random.seed(19680801) # 截取BuPu_r中0到80%的色段,丢弃后20%偏浅蓝色部分,保留更多紫色 original_cmap = plt.cm.BuPu_r truncated_cmap = ListedColormap(original_cmap(np.linspace(0, 0.8, 256))) plt.subplot(111) plt.imshow(np.random.random((100, 100)), cmap=truncated_cmap) plt.subplots_adjust(bottom=0.1, right=0.8, top=0.9) cax = plt.axes([0.85, 0.1, 0.075, 0.8]) plt.colorbar(cax=cax) plt.show()
如果需要更高紫色占比,可将linspace的第二个参数调小,比如改为0.7、0.6,丢弃更多蓝色部分。
方案3:调整数值映射边界(无需引入额外依赖)
通过设置imshow的vmax参数,将高于该值的所有像素都映射为色卡最右端的浅蓝,变相压缩蓝色显示范围,提升紫色占比:
import matplotlib.pyplot as plt import numpy as np # Fixing random state for reproducibility np.random.seed(19680801) plt.subplot(111) # 设置vmax=0.8,高于0.8的数值统一映射为最浅的蓝色,其余0-0.8的数值覆盖完整紫到浅蓝渐变 plt.imshow(np.random.random((100, 100)), cmap=plt.cm.BuPu_r, vmax=0.8) plt.subplots_adjust(bottom=0.1, right=0.8, top=0.9) cax = plt.axes([0.85, 0.1, 0.075, 0.8]) plt.colorbar(cax=cax) plt.show()
vmax数值越小,紫色渐变覆盖的数值范围越大,整体配色越偏紫。
内容的提问来源于stack exchange,提问作者zezo
相关产品推荐
相关产品推荐

