Seaborn颜色顺序控制:分组重复配色及HTML颜色兼容问题
解决Seaborn Barplot分组同色(重复颜色序列)的问题
问题核心
你需要让12个条形按默认的6种颜色每两个重复一次,之前踩的坑在于用错了参数:color是给所有条形设置单一颜色的,不支持传颜色列表;而palette才是用来定义颜色序列的正确选项,完全支持HTML色值。
具体实现步骤
获取Seaborn默认的'deep'调色板颜色
先把你提到的那6种默认颜色提取出来,不用手动记色值:import seaborn as sns # 提取deep调色板的6种颜色,转为HTML色值格式 default_colors = sns.color_palette('deep').as_hex() # 输出结果就是你说的:['#4C72B0', '#55A868', '#C44E52', '#8172B2', '#CCB974', '#64B5CD']生成重复两次的颜色列表
把每个默认颜色重复两次,凑出12个元素的序列:# 用循环生成:每个颜色加两次到列表里 my_palette = [] for color in default_colors: my_palette.extend([color, color]) # 或者用更简洁的列表推导式: # my_palette = [color for color in default_colors for _ in range(2)]传入palette参数绘制条形图
现在把这个自定义调色板传给sns.barplot的palette参数就行:import matplotlib.pyplot as plt import numpy as np # 模拟你的数据:12个条形的位置和均值 myrange = np.arange(12) means = np.random.rand(12) sns.barplot(x=myrange, y=means, palette=my_palette) plt.show()
补充说明
- 如果你不想提取默认颜色,也可以直接手动写出需要的HTML色值列表,直接传给
palette,比如:my_palette = ['#4C72B0', '#4C72B0', '#55A868', '#55A868', '#C44E52', '#C44E52', '#8172B2', '#8172B2', '#CCB974', '#CCB974', '#64B5CD', '#64B5CD'] sns.barplot(x=myrange, y=means, palette=my_palette) - 记住:
color参数只接受单个颜色值(比如'#4C72B0'),用于统一所有条形的颜色;而palette才是控制颜色序列的正确参数。
内容的提问来源于stack exchange,提问作者The Nightman
相关产品推荐
相关产品推荐

