python 一口气画三类提琴图对比

要从三个CSV文件中提取指定列名(这里是s2),并绘制小提琴图,其中横坐标是11km17km23km,纵坐标名称是S30/(km2),你可以使用Python的pandas库来处理CSV数据,seaborn库来绘制小提琴图,以及matplotlib库来设置图形属性。以下是一个完整的示例代码:

复制代码
#!usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: Suyue
@file: violin.py
@time: 2025/01/18
@desc:
"""
import pandas as pd
import seaborn as sns
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt


# CSV文件路径和对应的横坐标标签
csv_files = {
    '11km': '/5_area_.csv',
    '17km': '/8_area_.csv',
    '23km': '/11_area_.csv'
}

# 提取数据
data_frames = []
for label, file_path in csv_files.items():
    df = pd.read_csv(file_path)
    if 's3' in df.columns:
        df['Label'] = label  # 添加标签列
        data_frames.append(df[['s3', 'Label']])  # 只保留s3列和标签列
    else:
        raise ValueError(f"Column 's3' not found in {file_path}")

# 合并数据框
combined_df = pd.concat(data_frames, ignore_index=True)

# 重命名列以匹配图形要求
combined_df.columns = ['S30/(km2)', 'Label']

# 设置颜色列表(这里使用三种不同的颜色)
colors = ['skyblue', 'olivedrab', 'orchid']

# 绘制小提琴图
plt.figure(figsize=(10, 6))
ax = sns.violinplot(x='Label', y='S30/(km2)',palette=colors,data=combined_df)
# 设置y轴刻度大小
ax.tick_params(axis='y',labelsize=18)
# plt.title('Violin Plot of S30/(km2) for Different Distances')
plt.xlabel('Distance (km)',fontsize=18)
plt.ylabel('S${_3}$${_0}$/(k${m^2}$)',fontsize=18)
plt.xticks(rotation=0,fontsize=18)  # 旋转x轴标签以便更好地显示
plt.tight_layout()  # 自动调整子图参数, 使之填充整个图像区域
plt.show()
复制代码

代码解释

  1. CSV文件路径和对应的横坐标标签:
    • csv_files字典包含每个CSV文件的路径和对应的横坐标标签(11km17km23km)。
  2. 提取数据:
    • 遍历csv_files字典,使用pd.read_csv读取每个文件。
    • 检查s2列是否存在,如果存在,则添加标签列Label并将数据框添加到data_frames列表中。
  3. 合并数据框:
    • 使用pd.concat将所有数据框合并为一个。
  4. 重命名列:
    • 将合并后的数据框中的列名从s2Label更改为S30/(km2)Label,以匹配图形要求。
  5. 绘制小提琴图:
    • 使用seaborn.violinplot函数绘制小提琴图。
    • 设置图形的大小、标题、轴标签和x轴标签的旋转角度。
    • 使用plt.tight_layout()来确保所有标签和标题都可见且不会重叠。

确保你的CSV文件路径和列名与代码中的一致。运行这段代码后,你将得到一个小提琴图,其中横坐标表示不同的距离(11km17km23km),纵坐标表示S30/(km2)的值。

结果:

 

posted @   秋刀鱼CCC  Views(15)  Comments(0Edit  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示