使用Seaborn绘制stripplot组合图时无法按行分类着色的问题求助
问题原因
你当前的stripplot未指定用于分类着色的字段,因此即使定义了颜色映射也无法生效。
修改方案
假设你的数据集ARL_DA_reason3中存储航空公司代码的列名为AIRLINE(如果实际列名不同,替换成你的真实列名即可),给所有stripplot调用增加hue、palette参数即可,不需要修改其他逻辑,示例修改后的代码如下:
import seaborn as sns import matplotlib.pyplot as plt fig, axes=plt.subplots(1,5,figsize=(11,8)) my_new_color={'UA':'white','AA':'blueviolet','US':'#98F5FF', 'F9':'#FF9912','B6':'#66CD00','OO':'green','AS':'#3D59AB','NK':'black', 'WN':'red','DL':'yellow','EV':'#98F5FF','HA':'#FFF8DC','MQ':'#7FFF00', 'VX':'pink'} sns.boxplot(ax=axes[0],y='AIR_SYSTEM_DELAY', data=ARL_DA_reason3,linewidth=1, width=0.55) # 新增hue、palette参数,加legend=False避免重复显示图例 sns.stripplot(ax=axes[0],y='AIR_SYSTEM_DELAY', data=ARL_DA_reason3, size=10, hue='AIRLINE', palette=my_new_color, legend=False) sns.boxplot(ax=axes[1], data=ARL_DA_reason3, y='SECURITY_DELAY',linewidth=1, width=0.55) sns.stripplot(ax=axes[1],y='SECURITY_DELAY', data=ARL_DA_reason3, size=10, hue='AIRLINE', palette=my_new_color, legend=False) sns.boxplot(ax=axes[2], data=ARL_DA_reason3, y='AIRLINE_DELAY',linewidth=1, width=0.55) sns.stripplot(ax=axes[2],y='AIRLINE_DELAY', data=ARL_DA_reason3, size=10, hue='AIRLINE', palette=my_new_color, legend=False) sns.boxplot(ax=axes[3], data=ARL_DA_reason3, y='LATE_AIRCRAFT_DELAY',linewidth=1, width=0.55) sns.stripplot(ax=axes[3],y='LATE_AIRCRAFT_DELAY', data=ARL_DA_reason3, size=10, hue='AIRLINE', palette=my_new_color, legend=False) sns.boxplot(ax=axes[4], data=ARL_DA_reason3, y='WEATHER_DELAY',linewidth=1, width=0.55) sns.stripplot(ax=axes[4],y='WEATHER_DELAY', data=ARL_DA_reason3, size=10, hue='AIRLINE', palette=my_new_color, legend=False) plt.tight_layout() plt.show()
补充说明
如果需要箱线图也按照航司配色同步着色,给每个boxplot也添加和stripplot相同的hue、palette、legend=False参数即可。
内容的提问来源于stack exchange,提问作者Constellation
相关产品推荐
相关产品推荐

