当前位置: 首页 > news >正文

数据分布:散点+箱线+小提琴 三图合一

效果:

代码:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as npdef multi_violin_box_scatter(data_dict, colors=None):"""将多组数据的数据分布(以多种形式),展示在同一个图中。data_dict: key是数据名称,会显示在x轴上。"""if colors is None:colors = ["#75A478", "#D75B5B", "#D6A232", "#858585"]if len(colors) < len(data_dict):return -1# 准备数据data = []categories = []for key in data_dict:data.append(data_dict[key])categories.append(key)# 创建图形fig, ax = plt.subplots(figsize=(8, 6))# 绘制右半边的小提琴图for i in range(len(data)):parts = ax.violinplot(data[i], positions=[i], showmeans=False, showmedians=False, showextrema=False)for pc in parts['bodies']:  # 手动调整小提琴图形状,使其只显示右半边verts = pc.get_paths()[0].vertices  # 获取小提琴图的顶点verts[:, 0] = np.clip(verts[:, 0], i, np.inf)  # 只保留x方向大于中心位置的部分pc.set_facecolor(colors[i])pc.set_edgecolor('black')pc.set_alpha(0.7)# 绘制箱线图(在每个类别的中间位置)box_positions = np.arange(len(data))ax.boxplot(data, positions=box_positions, widths=0.1, patch_artist=True,boxprops=dict(facecolor='white', color='black'),medianprops=dict(color='black'),whiskerprops=dict(color='black'),capprops=dict(color='black'),flierprops=dict(marker='o', color='black', markersize=1),  # 设置异常值点的样式showfliers=True  # 显示异常值)# 绘制散点图for i, d in enumerate(data):jittered_x = np.random.normal(loc=i - 0.1, scale=0.05, size=len(d))  # 添加随机偏移,使点分散开、不要在一条竖线上ax.scatter(jittered_x, d, color=colors[i], alpha=0.8, s=1)# 设置x轴和y轴ax.set_xticks(np.arange(len(categories)))ax.set_xticklabels(categories)ax.set_ylabel('No. of BGCs / genome')# 显示图像plt.show()if __name__ == '__main__':# 小提琴+箱线+散点data_dict = {'subtilis': np.random.normal(15, 5, 500),'cereus': np.random.normal(15, 5, 500),'megaterium': np.random.normal(8, 3, 500),'circulans': np.random.normal(4, 2, 500)}multi_violin_box_scatter(data_dict, ['#7FA557', '#AE5259', '#CF992C', '#7E7E7E'])


http://www.mrgr.cn/news/25173.html

相关文章:

  • 公开数据库汇总及下载3-遗传变异数据库(ClinVar、dbVar、dbSNP、RefSeq)、oncoKB
  • 价值流:从理论框架到实践落地的系统化指南
  • 【Linux】Linux常见指令以及权限理解(下)
  • 路径规划 | 基于A*算法的往返式全覆盖路径规划的改进算法(Matlab)
  • 峟思-振弦式应变计在煤矿井筒中的应用
  • 《2024-2029年全球及中国交通安全移动护栏市场现状分析与发展前景预测研究报告》
  • 股指期货开户条件有什么要求和流程?
  • 【JAVA入门】Day39 - 字符集
  • 初识Linux · 进程(1)
  • 华媒舍:10种提升推特大V发文推广曝光率的方式
  • 零基础考过软考信息系统项目管理师经验分享
  • 正版软件 | Sticky Password 终身密码管理器 - 使用教程分享
  • 最好磁吸充电宝是哪个牌子?目前公认好用磁吸充电宝排行榜!
  • 这项新技术让 AI 感知自己的情感——也感知你的情感
  • 微服务保护学习笔记(四)FeignClient整合Sentinel、线程隔离(舱壁模式)、熔断降级
  • 大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
  • 亲测好用,ChatGPT 3.5/4.0新手使用手册~
  • UEFI学习笔记(四):inf、dec和dsc
  • tekton pipeline resources
  • 项目启动 | 盘古信息携手晶捷电子,开启数字化生产管理新纪元