首页 > 编程语言 >python 一口气画三类提琴图对比

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

时间:2025-01-18 11:44:14浏览次数:1  
标签:三类 plt 提琴 python 标签 S30 Label df csv

要从三个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': 'G:/装备科/孔老师/20250118/58/5_area_.csv',
    '17km': 'G:/装备科/孔老师/20250118/58/8_area_.csv',
    '23km': 'G:/装备科/孔老师/20250118/58/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))
sns.violinplot(x='Label', y='S30/(km2)',palette=colors,data=combined_df)
# plt.title('Violin Plot of S30/(km2) for Different Distances')
plt.xlabel('Distance (km)')
plt.ylabel('S30/(k${m^2}$)')
plt.xticks(rotation=0)  # 旋转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)的值。

标签:三类,plt,提琴,python,标签,S30,Label,df,csv
From: https://www.cnblogs.com/shirleysu90/p/18678171

相关文章

  • 第10个项目:图片转Turtle代码生成器Python源码
    完整源码在文末,可直接下载使用,也可在此基础上做定制开发。应用场景:上传图片,自动生成Turtle代码。点击执行代码,可把图片完整画出来。功能特点:支持设置背景图片,可在背景图片上嵌入式画图,很有意思。软件截图:核心源码:importtkinterastkfromtkinterimportfiledialog,t......
  • 【2024年华为OD机试】 (A卷,200分)- 硬件产品销售方案(Java & JS & Python&C/C++)
    一、问题描述题目描述某公司目前推出了AI开发者套件,AI加速卡,AI加速模块,AI服务器,智能边缘多种硬件产品,每种产品包含若干个型号。现某合作厂商要采购金额为amount元的硬件产品搭建自己的AI基座。例如当前库存有N种产品,每种产品的库存量充足,给定每种产品的价格,记为price(不......
  • 【2024年华为OD机试】 (B卷,100分)- 流水线(Java & JS & Python&C/C++)
    一、问题描述题目描述一个工厂有m条流水线,来并行完成n个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业。现给定流水线个数m,需要完成的作业数n,每个作业的处理时间分别为t1,t2,...,tn。请你编程计算处理完所有作业的耗时为多......
  • 股票API接口使用python、JAVA等多种语言实例代码演示免费获取实时数据、历史数据、CDM
    ​最新整理的股票API接口,下方所有接口链接均可直接点击验证,查看返回的数据。沪深两市股票列表股票API接口链接(可点击验证):https://api.mairui.club/hslt/list/LICENCE-66D8-9F96-0C7F0FBCD073【实时数据接口】沪深两市实时交易数据接口股票API接口链接(可点击验证):https:......
  • Python 进阶 - 多线程(一)
    Python进阶-多线程相关概念解释器GILthreading方法属性threading.enumerate()threading.active_count()threading.current_thread()threading.get_ident()threading.main_thread()threading.stack_size([size])threading.get_native_id()threading.TIMEOUT_MAX线程......
  • SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路
    随着公司业务的增加,公司需要一个java+python人工智能相互配合架构,正常网站业务用java来做,而ai,例如电价预测等回归任务,以及大模型预测全网负荷,新能源出力等任务,使用python通过fastapi暴露接口来做,那么就需要springcloud架构注册发现。前端统一使用Vue进行效果的展示因此本......
  • Python图形用户界面(GUI)库
    Python图形用户界面(GUI)库是用于创建图形用户界面的工具集,它们允许开发者使用Python语言来构建具有图形元素的用户界面。以下是一些常用的PythonGUI库:1.Tkinter•简介:Tkinter是Python的标准GUI库,它提供了创建窗口、按钮、文本框和其他GUI组件的工具。由于它是Python安装包......
  • 第 6 课 Python函数和模块
    1.函数介绍        在Python语言中,函数可分为内置函数和自定义函数。内置函数也称作内建函数,是Python自带的函数,无需导入任何函数库即可直接调用。常用的内置函数有print()、input()、range()等。自定义函数就是将一段有规律的、可重复使用的代码定义成函数,以提升......
  • Python 字符串分割时 spilt 和 re 效率对比
    假设有一些文件名是数字_文档名的格式,如何用python将数字提取出来?可以使用Python的正则表达式模块re提取文件名中的数字部分。以下是实现代码:示例代码:importre#示例文件名列表file_names=["1_file1.txt","2_file2.txt","10_document.doc","random_file.......
  • 【华为OD-E卷 - 数组连续和 100分(python、java、c++、js、c)】
    【华为OD-E卷-数组连续和100分(python、java、c++、js、c)】题目给定一个含有N个正整数的数组,求出有多少个连续区间(包括单个正整数),它们的和大于等于x输入描述第一行两个整数Nx(0<N<=100000,0<=x<=10000000)第二行有N个正整数(每个正整数小于等于100)输出......