Seaborn散点图调色板颜色不足:如何结合标记形状区分多季数据
解决Seaborn散点图多季颜色重复并结合标记形状区分的问题
可以通过将季数分组,同时用hue控制分组颜色、style控制标记形状的方式实现,无需创建大量自定义颜色。以下是具体实现方案:
核心思路
把35季划分为若干小组(比如每5季一组),让每个小组对应一种颜色+一种标记形状,既避免颜色重复,又能通过形状进一步区分不同阶段的季数。
修改后的完整代码
import matplotlib.pyplot as plt import seaborn as sns # 给DataFrame添加分组列:每5季为一个分组 df['Season Group'] = (df['Season'] - 1) // 5 # 计算结果为0、1、2...对应不同分组 plt.figure(figsize=(20, 8)) # 散点图:同时用hue和style绑定分组变量 sns.scatterplot( data=df, x='Episode Number', y='Rating', hue='Season Group', style='Season Group', palette='tab10', markers=['o', 's', '^', 'D', 'p', '*', 'h'], # 可选:自定义标记形状,数量匹配分组数即可 s=50 ) # 回归线保持原有配置 sns.regplot( data=df, x='Episode Number', y='Rating', scatter=False, ci=None, line_kws={ 'color':'red', 'linestyle':'-', 'linewidth':3, 'alpha':0.3 } ) # 优化图例位置与标题 plt.legend(title='Season Group', bbox_to_anchor=(1.05, 1), loc='upper left') plt.xlabel('Episode Number') plt.ylabel('Rating') plt.title('The Simpsons Episode Ratings by Season Group') plt.show()
关键细节
- 分组逻辑可灵活调整:比如将
(df['Season'] -1)//5改为(df['Season'] -1)//4,就能实现每4季一组 - 不手动指定
markers时,Seaborn会自动循环使用默认标记库,足以覆盖35季的分组需求(35季分成7组,默认标记数量足够) - 分组后的图例能清晰展示每组对应的颜色和形状,方便观众快速区分不同阶段的季数
内容的提问来源于stack exchange,提问作者Matheus Gonella
相关产品推荐
相关产品推荐

