Seaborn violinplot自定义palette颜色与输出不一致如何解决?
解决Seaborn自定义调色板颜色不符的问题
问题原因
Seaborn 默认会对自定义调色板的颜色进行去饱和处理(降低饱和度),让图表视觉效果更柔和,这就导致你设置的HEX颜色和实际渲染的颜色出现偏差。
解决方案
有两种简单的方式可以修正这个问题:
方案1:在绘图函数中添加desaturate=1参数
直接关闭Seaborn的自动去饱和逻辑,让颜色完全按照你指定的HEX值渲染,violinplot和barplot都支持这个参数。
修改后的小提琴图代码:
from matplotlib import pyplot as plt import seaborn as sns import pandas as pd tips = sns.load_dataset('tips') ax = sns.violinplot( x="day", y="total_bill", hue="smoker", palette=['#5f82b5', '#D76364'], data=tips, split=True, inner='box', desaturate=1 # 关闭颜色去饱和 ) ax.legend_.remove() plt.show()
柱状图的示例代码:
from matplotlib import pyplot as plt import seaborn as sns import pandas as pd tips = sns.load_dataset('tips') ax = sns.barplot( x="day", y="total_bill", hue="smoker", palette=['#5f82b5', '#D76364'], data=tips, desaturate=1 # 关闭颜色去饱和 ) plt.show()
方案2:手动创建调色板并指定去饱和值
如果你需要复用调色板,可以用sns.color_palette创建自定义调色板时设置desat=1:
from matplotlib import pyplot as plt import seaborn as sns import pandas as pd tips = sns.load_dataset('tips') # 创建无去饱和的自定义调色板 custom_palette = sns.color_palette(['#5f82b5', '#D76364'], desat=1) ax = sns.violinplot( x="day", y="total_bill", hue="smoker", palette=custom_palette, data=tips, split=True, inner='box' ) ax.legend_.remove() plt.show()
验证
设置完成后,用取色器检查图表颜色,会发现和你指定的HEX颜色完全一致。
内容的提问来源于stack exchange,提问作者Knotnet
相关产品推荐
相关产品推荐

