Matplotlib - 绘制 小提琴图 (Violin Plot) 函数源码

news/2024/11/17 23:58:54/

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://blog.csdn.net/caroline_wendy/article/details/131069896

小提琴图 (Violin Plot) 类似纺锤,小提琴图是一种用来显示数据分布和概率密度的图形,结合了箱线图和核密度图的特点。小提琴图的中间部分是一个箱线图,显示了数据的中位数、四分位数和异常值。小提琴图的两侧是一个核密度图,显示了数据的分布形状。小提琴图可以用来比较不同类别或分组的数据,展示数据的差异和相似性。

示例如下:
示例
源码:

#!/usr/bin/env python
# -- coding: utf-8 --
"""
Copyright (c) 2022. All rights reserved.
Created by C. L. Wang on 2023/6/6
"""
import osimport matplotlib.pyplot as plt
import pandas as pd
import seaborn as snsfrom myutils.project_utils import read_excel_to_df
from root_dir import DATA_DIRdef draw_violin_plot(df, score_col_name, label_col_name,x_label="", y_label="", title="",is_show=False, save_name=""):"""绘制小提琴图:param df: 数据格式,至少包括两列,即数据值列score,标签列label,相同类别的标签相同:param score_col_name: 数值列名称:param label_col_name: 标签列名称:param x_label: 显示的x标签:param y_label: 显示的y标签:param title: 显示的图名称:param is_show:  是否IDE显示:param save_name: 是否存储文件,tight格式:return:"""plt.figure(figsize=(16, 10), dpi=80)sns.violinplot(x=label_col_name, y=score_col_name, data=df, inner='quartile')plt.xlabel(xlabel=x_label)plt.ylabel(ylabel=y_label)if title:plt.title(title, fontsize=12)if save_name:# transparent=Trueplt.savefig(save_name, bbox_inches='tight', format='png')if is_show:plt.show()def main():df = read_excel_to_df(os.path.join(DATA_DIR, "ourbest_20230601_tmscore_56.xls"))# df = read_excel_to_df(os.path.join(DATA_DIR, "ourbest_20230605_dockq_9_final.xls"))# df.info()# 加工数据格式,满足数值和标签的格式score1 = df["m0-score"]score2 = df["m1-score"]score3 = df["cur-score"]label_col = ["SOTA" for _ in range(df["m0-score"].size)] + \["Baseline" for _ in range(df["m1-score"].size)] + \["Our Best" for _ in range(df["cur-score"].size)]score_list = pd.concat([score1, score2, score3])score_name = "DockQ"data = {score_name: score_list, "label": label_col}new_df = pd.DataFrame(data)# df.info()draw_violin_plot(new_df, score_col_name=score_name, label_col_name="label",x_label="", y_label=score_name,is_show=True, save_name="xxx.png")if __name__ == '__main__':main()

参考:Matplotlib可视化最有价值的50个图表(附完整Python源代码)


http://www.ppmy.cn/news/242053.html

相关文章

Java实现手动操作定时任务功能的简单例子(动态创建定时任务)

还记得在前公司与同事共同开发一个在页面上统一管理定时提醒任务的功能,实际业务可能会复杂一些,它需要结合小程序或公众号平台对各个用户进行周期性(按季度、按月、按日等)的消息推送。由于我当时负责的是小程序和公众号平台方面…

基于ODX/OTX诊断的整车扫描

| ODX (Open Diagnostic data eXchange) 是基于XML语言、开放的诊断数据格式,用于车辆整个生命周期中诊断数据的交互。它一开始由ASAM提出并形成标准MCD-2D,后来以ODX2.2.0为基础形成了ISO标准——ISO 22901-1。 | OTX (Open Test sequence eXchange) …

Appium + mitmProxy 实现APP接口稳定性测试

随着 App 用户量的不断增长,任何小的问题都可能放大成严重的线上事故,为了避免对App造成损害的任何可能性,我们必须从各个方面去思考 App 的稳定性建设,尽可能减少任何潜在的威胁。 1.背景介绍 为了保障 App 的稳定性&#xff0c…

cgb2110-day11

文章目录 一,复习--1,测试 二,JSON--1,测试 三,DOM--1,概述--2,Document对象--3,测试--4,把HTML和JS代码分离HTML中引入js创建js文件 四,Vue--1,概述--2,入门案例--3,MVVM--4,改造入门案例--5,练习 五,Vue的基础语法--1,运算符--2,创建函数--3,解析复杂的数据--4,vue的data的三…

cgb2107-day18

文章目录 一,Spring AOP--1,概述--2,使用步骤--3,创建切面--4,测试创建启动类创建HelloController 类测试 二,两个框架的整合--1,需求--2,开发步骤0,项目结构1,RunApp启动类2,application.yml改端口3,Car类,封装数据4,CarService接口,定义抽象方法5,CarServiceImpl实现类,重写抽…

G001-181-08

作业报告 课程名称 需求工程 班级 软件工程1班 作业名称 用户需求分析书 教导教师 董瑞生日期 2020/10/10 Inventory control system 项目 用户需求分析书 目录 作业报告 1 Inventory control system 项目 1 用户需求分析书 1 1.引言 2 1.1. 编写目的 2 1.2 项目前景和范围…

CGB2104-Day20

1. 后端项目搭建易错说明 1.1 数据库链接异常 问题描述: 该报错说明程序与数据库链接失败了. 解决方案: 1. 检查数据库服务器是否启动. 2. 检查链接数据库的用户名/密码/端口号/数据库名称 3. 检查数据库权限/防火墙 1.2 后端服务器链接异常 1.2.1报错说明 说明: 1.可能…

CGB2005 JT-1

1.物理模型图设计 1.1 导入京淘数据库 1.1.1安装SqlYog 双击运行 1.1.2 链接数据库 1.1.3 导入JT数据库 说明:导入课前资料中的jtdb.sql 数据库文件. 方式2: source 路