提供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)
修改file_path = r'...'代码,改为你自己的Excel文件路径。
file_path = r'F:\data.xlsx' # 设置Excel文件路径
数据格式如下图所示。
修改代码和文件中的名称,指名分类列即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"]
# 设置标题和标签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瀑布图
如果需要完整代码和数据集,关注公众号,后台回复:分类小提琴图 即可领取!!!
如发现代码的问题和错误,欢迎在评论区指正!
如果觉得有帮助,请点赞、收藏、转发!
如有特定需求,也可通过私信联系!
感谢大家的支持!