You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Seaborn swarmplot添加基于Heat类别的独特标记维度

为Seaborn散点群图添加自定义标记区分Heat维度

Seaborn原生swarmplot不支持直接通过参数设置另一维度的标记样式,需要手动分组绘制来实现。以下是具体实现步骤:

  • 为每个唯一的Heat值分配专属标记,可使用matplotlib支持的标记类型(如'o', 's', '^', 'D', '*'等)
  • 按Heat分组遍历数据,分别绘制子散点群图,指定对应标记
  • 统一处理hue对应的颜色映射,保证粒度(Grain Size)的颜色一致性
  • 最后合并图例,同时展示颜色(粒度)和标记(Heat)的对应关系

完整实现代码:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 初始化数据框
df = pd.DataFrame()
c_data = [10,20,30,35, 8]
time_data = [100, 1000, 10000, 4000, 16000]
gs_data = [1.5, 2, 3, 4, 5]
heat_data = [2412, 1421, 1445, 6366, 1131]

df['charpy'] = c_data
df['time'] = time_data 
df['Grain Size'] = gs_data
df['Heat'] = heat_data

# 创建Heat到标记的映射
heat_markers = {
    2412: 'o',
    1421: 's',
    1445: '^',
    6366: 'D',
    1131: '*'
}

# 获取Grain Size的颜色映射(复用Seaborn默认hue颜色)
palette = sns.color_palette(n_colors=len(df['Grain Size'].unique()))
gs_color_map = dict(zip(df['Grain Size'].unique(), palette))

fig, a = plt.subplots(dpi=150)

# 按Heat分组绘制swarmplot
for heat_val, group in df.groupby('Heat'):
    sns.swarmplot(
        data=group,
        x='time',
        y='charpy',
        hue='Grain Size',
        ax=a,
        size=8,
        marker=heat_markers[heat_val],
        palette=gs_color_map,
        legend=False  # 关闭自动图例,后续手动合并
    )

# 手动构建复合图例
# 颜色对应Grain Size的图例元素
color_handles = [plt.Line2D([], [], marker='o', color=gs_color_map[gs], linestyle='', markersize=8) 
                 for gs in df['Grain Size'].unique()]
color_labels = [f'Grain Size: {gs}' for gs in df['Grain Size'].unique()]

# 标记对应Heat的图例元素
marker_handles = [plt.Line2D([], [], marker=heat_markers[heat], color='black', linestyle='', markersize=8) 
                  for heat in heat_markers.keys()]
marker_labels = [f'Heat: {heat}' for heat in heat_markers.keys()]

# 合并图例并调整位置
a.legend(handles=color_handles + marker_handles, labels=color_labels + marker_labels, bbox_to_anchor=(1.05, 1), loc='upper left')

plt.tight_layout()
plt.show()

关键细节说明:

  • heat_markers字典可根据需求自由调整标记类型,支持所有matplotlib兼容的标记
  • 提前定义gs_color_map确保同一粒度值在不同Heat分组中颜色一致
  • 关闭自动图例后手动构建复合图例,避免重复元素干扰视觉

内容的提问来源于stack exchange,提问作者Austin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:42:25