如何在Seaborn多图表中保留列-颜色关联?附示例代码
解决方案
要保留Plot 1中的列与颜色的对应关系,你可以通过创建列名到颜色的映射字典来实现,无需手动指定十六进制颜色码,步骤如下:
- 获取Seaborn默认调色板的颜色,对应原DataFrame(
df_1)的列顺序生成颜色映射 - 绘制Plot 2时,将这个映射字典传入
palette参数
修改后的完整代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns np.random.seed(42) df_1 = pd.DataFrame(np.random.rand(5, 5), columns=['A', 'B', 'C', 'D', 'E']) df_2 = df_1.drop(['B', 'D'], axis=1) # --- Plot 1 --- sns.boxplot(data=df_1, orient="h") plt.show() # 创建列名-颜色映射字典:对应df_1的列顺序分配默认调色板颜色 color_map = dict(zip(df_1.columns, sns.color_palette())) # --- Plot 2 --- sns.boxplot(data=df_2, orient="h", palette=color_map) plt.show()
原理说明
- Seaborn默认会按当前数据的列顺序,循环使用默认调色板的颜色。当你删除
B和D列后,原C、E会被分配调色板中靠前的颜色,导致颜色对应关系改变。 - 通过
zip(df_1.columns, sns.color_palette()),我们把原DataFrame的每一列和默认调色板的颜色一一绑定,生成映射字典。绘制Plot 2时,Seaborn会根据列名匹配对应的颜色,这样C会保持绿色,E保持紫色。
内容的提问来源于stack exchange,提问作者doine
相关产品推荐
相关产品推荐

