如何在Matplotlib中自定义散点图颜色条的颜色中点?
自定义Matplotlib颜色条中点的实现方法
要实现将颜色条中点设为5(白色对应数值5)且保持范围0-20,你可以使用matplotlib.colors.TwoSlopeNorm类创建自定义归一化规则,替代默认的线性归一化逻辑。
修改后的完整代码
import pandas as pd import matplotlib.pyplot as plt from matplotlib.colors import TwoSlopeNorm col1, col2, col3 = [], [], [] for i in range(0,21): col1.append(i) col2.append(i**1.5) col3.append(i) data = pd.DataFrame({'col1': col1, 'col2': col2, 'col3': col3}) fig = plt.figure() ax = plt.axes() # 创建自定义归一化对象,指定数值范围与中点 norm = TwoSlopeNorm(vmin=0, vcenter=5, vmax=20) # 将归一化对象传入scatter,覆盖默认配色逻辑 im = ax.scatter(data['col1'], data['col2'], c=data['col3'], cmap='RdBu', norm=norm) cbar = fig.colorbar(im, ax=ax) plt.show()
关键说明
TwoSlopeNorm(旧版名为SymNorm)专为非对称颜色映射场景设计,支持独立设置最小值、中点和最大值。- 此处
vmin=0和vmax=20保留原数值范围,vcenter=5指定颜色映射的中点为5,对应RdBu配色中的白色。 - 将
norm对象传递给scatter的norm参数,即可替换默认的线性归一化,实现自定义中点的配色效果。
内容的提问来源于stack exchange,提问作者Bas R
相关产品推荐
相关产品推荐

