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

使用matplotlib绘制Raincloud图/云雨图/柱状图/小提琴图

需求: 使用Python的matplotlib绘制数据分布、数据箱型图、数据散点图
参考: https://blog.csdn.net/weixin_39559994/article/details/128197965?fromshare=blogdetail&sharetype=blogdetail&sharerId=128197965&sharerefer=PC&sharesource=captain_keating&sharefrom=from_link
输入数据格式: df为dataframe格式,样例如下
在这里插入图片描述
输出效果:
在这里插入图片描述
代码/作图函数:

def plot_raincloud():fig = plt.figure(figsize = (15,15),dpi = 300)  # 创建Figure对象plt.rcParams['font.sans-serif'] = 'SimHei'				# 设置字体为SimHei显示中文在这里插入代码片,如果你的坐标轴有中文名,须设置plt.rcParams['font.family'] = 'Arial' 	   # 设置字体样式plt.rcParams['font.size'] = '14' 					   # 设置字体大小 plt.rcParams['xtick.direction'] = 'out'                  #将x周的刻度线方向设置向内plt.rcParams['ytick.direction'] = 'out'                  #将y轴的刻度方向设置向内colors = ['tomato', 'darksalmon', 'deepskyblue', 'mediumseagreen', 'orange','#bce27f','#aab8d8']# 增加rain部分的随即抖动data_x = [df[col].dropna().values for col in df.columns]for i in range(len(data_x)):idxs = np.arange(len(data_x[i]))out = data_x[i].astype(float)out.flat[idxs] += np.random.uniform(low=-0.1, high=0.1, size=len(idxs))data_x[i] = out# 计算统计信息statistics = {'Feature': [],'Mean': [],'Variance': [],'StdDev': [],'Min': [],'Max': [],'25th Percentile': [],'50th Percentile (Median)': [],'75th Percentile': [],'SEM': []}for idx, col in enumerate(new_column_names):statistics['Feature'].append(col)statistics['Mean'].append(np.mean(data_x[idx]))statistics['Variance'].append(np.var(data_x[idx]))statistics['StdDev'].append(np.std(data_x[idx]))statistics['Min'].append(np.min(data_x[idx]))statistics['Max'].append(np.max(data_x[idx]))statistics['25th Percentile'].append(np.percentile(data_x[idx], 25))statistics['50th Percentile (Median)'].append(np.percentile(data_x[idx], 50))statistics['75th Percentile'].append(np.percentile(data_x[idx], 75))# 计算SEM (标准误差)n = len(data_x[idx])  # 样本数量sem = np.std(data_x[idx]) / np.sqrt(n)  # 计算SEMstatistics['SEM'].append(sem)statistics_df = pd.DataFrame(statistics)# 创建图片ax = fig.add_axes([0.1, 0.61, 0.42, 0.3])# ------------------------------# 绘制 violin 图(雨图)vp = ax.violinplot(data_x, points=500, showmeans=False, widths=1.1,# 控制小提琴图的宽度showextrema=False, showmedians=False, vert=True)for idx, b in enumerate(vp['bodies']):b.set_color(colors[idx])b.get_paths()[0].vertices[:, 0] = np.clip(b.get_paths()[0].vertices[:, 0], idx+1, idx+2)# ------------------------------# 绘制散点图(滴点)for idx, y_vals in enumerate(data_x):x = np.full(len(y_vals), idx + 0.8)x += np.random.uniform(low=-0.15, high=0.15, size=len(x))# low和high调整散点图抖动范围ax.scatter(x, y_vals, s=2, c=colors[idx], alpha=0.5)# ------------------------------# 绘制箱型图(箱图)box_positions = np.arange(0.8, len(new_column_names)+0.8)  # 控制箱型图的左右偏移bp = ax.boxplot(data_x, vert=True, patch_artist=True, positions=box_positions,widths=0.2, showfliers=False,# 控制箱型图宽度boxprops=dict(facecolor='none', color='black'),medianprops=dict(color='black'),whiskerprops=dict(color='black'),capprops=dict(color='black'))# ---------------------------ax.invert_yaxis()ylim.reverse()ax.set_ylim([-20,1100])ax.set_xticks(np.arange(1, len(new_column_names)+1))ax.set_xticklabels(new_column_names, rotation=60,fontdict={"family": "SimSun", "size": 20})ax.set_ylabel('y轴标题',fontdict={"family": "SimSun", "size": 20})ax.grid(True, linestyle='--', alpha=0.5)return statistics_df
# 调用函数,返回统计指标dataframe
df1 = plot_raincloud() 

备注: new_column_names这个变量里装的是列名的列表,封装函数时忘了加进去了,大家使用的时候自己定义下即可,添加y坐标用的

http://www.xdnf.cn/news/154279.html

相关文章:

  • 《代码之美:静态分析工具与 CI 集成详解》
  • 【虚幻C++笔记】碰撞检测
  • 探秘卷积神经网络:深度学习的图像识别利器
  • 【Linux网络】构建HTTP响应与请求处理系统 - HttpResponse从理解到实现
  • 常见的机器视觉通用软件
  • JDBC数据库操作中如何保证最后关闭了所占用的资源——try用法的细节控制
  • k8s中资源的介绍及标准资源namespaces实践
  • 如何在 Conda 环境中降级 Python 版本:详细指南
  • H.264/AVC标准主流开源编解码器编译说明
  • 2025第十六届蓝桥杯大赛(软件赛)网络安全赛 Writeup
  • MyBatis缓存配置的完整示例,包含一级缓存、二级缓存、自定义缓存策略等核心场景,并附详细注释和总结表格
  • Prometheus、Zabbix和Nagios针对100个节点的部署设计架构图
  • PyTabKit:比sklearn更强大的表格数据机器学习框架
  • 性能提升手段--池化技术
  • 机器学习之一:机械式学习
  • 【学习笔记】检索增强生成(RAG)技术
  • flutter 引擎初始化
  • React Router v7 从入门到精通指南
  • Android学习总结之ANR问题
  • 学习笔记:Qlib 量化投资平台框架 — GETTING STARTED
  • 【SpringBoot】WebConfig 跨域配置详细说明
  • 聊聊Spring AI Alibaba的YuQueDocumentReader
  • [Lc day] 滑动窗口 | hash | 前缀和 | 维护区间最值子数组
  • JSP实现用户登录注册系统(三天内自动登录)
  • ASAM MDF 文件格式简介:测量数据的标准化存储
  • 【漫话机器学习系列】225.张量(Tensors)
  • 【Linux网络】构建与优化HTTP请求处理 - HttpRequest从理解到实现
  • 【Android】四大组件之Service
  • WPF实现多语言切换
  • ubantu18.04(Hadoop3.1.3)之Spark安装和编程实践