当前位置:首页>python>【科研绘图】只用Python绘图之分组小提琴图

【科研绘图】只用Python绘图之分组小提琴图

  • 2026-10-21 14:32:52
【科研绘图】只用Python绘图之分组小提琴图

点击蓝字

关注我们

提供Python/Origin定制化绘图服务,支持先出样图,满意后付款

本期内容

本期文章将带您探索如何用Python绘制精美的分组小提琴图,是一种用于可视化多组数据的图形表示方法。

结果展示

代码实现

1.导入库加载数据:

# 设置绘图风格sns.set_theme(style="whitegrid")try:    # 尝试读取 Excel 文件    df = pd.read_excel('data.xlsx', engine='openpyxl',                       sheet_name='Sheet1', header=0)    print("成功读取 Excel 文件")except Exception as e:    print(f"文件读取错误或文件不存在,使用图片中的示例数据: {e}")# 数据预处理:将宽格式转换为长格式 (Long Format) 以适应 Seaborn# id_vars 保留 'class',其他的列 (A, B, C, D, E) 融化为 'Variable' 和 'Value'df_melted = df.melt(id_vars='class', var_name='Group', value_name='Value')# 确保 class 列是分类变量,便于绘图图例显示df_melted['class'] = df_melted['class'].astype(str)# my_palette = ["#a596ee", "#f0c2a2"]# my_palette = ["#c8627a", "#5595d1"]my_palette = ["#fdc0e1", "#71b0fd"]# my_palette = ["#8ab001", "#71b0fd"]

2.绘制分组小提琴图

# 绘制分边小提琴图ax = sns.violinplot(data=df_melted, x='Group', y='Value', hue='class',                    split=True,                    inner=None,# "quart"                    palette=my_palette,                    width=0.8,                    linewidth=1                    )sns.boxplot(data=df_melted, x='Group', y='Value', hue='class',            width=0.1,       # 箱子宽度            dodge=True,      # 关键点:让箱子并排分开,而不是重叠            fliersize=0,     # 不显示异常值点(可选,避免图面混乱)            palette=my_palette, # 使用相同配色            ax=ax,            boxprops={'zorder': 2, 'alpha': 1}, # 设置半透明,也可以设为 'facecolor': 'white'            linewidth=1.5            )

3.设置坐标轴格式和标签:

# 清理重复的图例 (因为叠加了两次图,图例会有重复)handles, labels = ax.get_legend_handles_labels()# 只保留前一半的图例 (即小提琴的图例)n_categories = len(df_melted['class'].unique())plt.legend(handles[:n_categories], labels[:n_categories],           title='Class',           fontsize=14,          # 设置图例中标签文本(Class类别名)的大小           title_fontsize=16,    # 设置图例标题('Class')的大小           loc='upper right'     # 可选:固定图例位置          )# 设置标题和标签plt.title('Split Violin Plot by Class', fontsize=16)plt.xlabel('Groups', fontsize=16)plt.ylabel('Values', fontsize=16)# 1. 设置横轴(和纵轴)刻度字体的大小# axis='x' 仅修改横轴,labelsize 设置字号plt.tick_params(axis='x', labelsize=14)plt.tick_params(axis='y', labelsize=14) 

✦

如何应用于自己数据?

✦

Part.1 准备绘图所需要的数据文件

修改file_path = r'...'代码,改为你自己的Excel文件路径。

file_path = r'F:\data.xlsx'  # 设置Excel文件路径

数据格式如下图所示。

Part.2 定义类别列和颜色

修改代码和文件中的名称,指名分类列即df_melted['class'] = df_melted['class'].astype

(str),根据自己绘图需求修改颜色,修改图形布局。

try:    # 尝试读取 Excel 文件    df = pd.read_excel('data.xlsx', engine='openpyxl',                       sheet_name='Sheet1', header=0)    print("成功读取 Excel 文件")except Exception as e:    print(f"文件读取错误或文件不存在,使用图片中的示例数据: {e}")# 数据预处理:将宽格式转换为长格式 (Long Format) 以适应 Seaborn# id_vars 保留 'class',其他的列 (A, B, C, D, E) 融化为 'Variable' 和 'Value'df_melted = df.melt(id_vars='class', var_name='Group', value_name='Value')# 确保 class 列是分类变量,便于绘图图例显示df_melted['class'] = df_melted['class'].astype(str)# my_palette = ["#a596ee", "#f0c2a2"]# my_palette = ["#c8627a", "#5595d1"]my_palette = ["#fdc0e1", "#71b0fd"]# my_palette = ["#8ab001", "#71b0fd"]

Part.3 根据需求定义图形

设置图形样式、坐标轴和标签等,其他设置详见代码。

# 设置标题和标签plt.title('Split Violin Plot by Class', fontsize=16)plt.xlabel('Groups', fontsize=16)plt.ylabel('Values', fontsize=16)# 1. 设置横轴(和纵轴)刻度字体的大小# axis='x' 仅修改横轴,labelsize 设置字号plt.tick_params(axis='x', labelsize=14)plt.tick_params(axis='y', labelsize=14)

推荐

【科研绘图】只用Python绘图之堆叠条形图

【科研绘图】只用Python绘图之三维条形图

【科研绘图】只用Python绘图之相关性热图

【科研绘图】只用Python绘图之环形蜂窝条形图

【科研绘图】只用Python绘图之3D瀑布图

如果需要完整代码和数据集,关注公众号,后台回复:分类小提琴图   即可领取!!!

如发现代码的问题和错误,欢迎在评论区指正!

如果觉得有帮助,请点赞、收藏、转发!

如有特定需求,也可通过私信联系!

感谢大家的支持!

个人观点  仅供参考

最新文章

随机文章