Python嵌套绘图并为条形图添加自定义标注

news2024/11/28 10:40:48

论文绘图时经常需要多图嵌套,正好最近绘图用到了,记录一下使用Python实现多图嵌套的过程。

首先,实现 Seaborn 分别绘制折线图和柱状图。

'''绘制折线图'''
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore", "use_inf_as_na")
# 获取绘图数据
df_fmri=sns.load_dataset("fmri")
# 绘制折线图
sns.lineplot(data=df_fmri, x="timepoint", y="signal", hue="event")
# 创建绘图数据
df_bar=df_fmri[['subject','signal']].groupby('subject',observed=True).agg('max').reset_index()
# 绘制条形图
ax_bar=sns.barplot(
data=df_bar,
x="subject", y="signal",
palette='Set2',
)

20240226150039

20240226151334

接下来实现条形图与折线图的嵌套,核心是使用 inset_axes 函数创建一个新的轴,然后再绘制第二个图时指定绘图的轴为刚才新建的轴。

from mpl_toolkits.axes_grid1.inset_locator import inset_axes
import matplotlib.pyplot as plt
# 获取绘图数据
df_fmri = sns.load_dataset("fmri")
df_bar=df_fmri[['subject','signal']].groupby('subject',observed=True).agg('max').reset_index()
# 绘制折线图
ax=sns.lineplot(data=df_fmri, x="timepoint", y="signal", hue="event")
plt.legend(loc='upper left')
# 使用 inset_axes 函数添加一个轴,用来显示条形图
ax_bar = inset_axes(
ax, # 父轴
width='40%', height='50%', # 新轴相对于父轴的长宽比例
loc='lower left', # 新轴的锚点相对于父轴的位置
bbox_to_anchor=(0.55,0.45,1,1), # 新轴的bbox
bbox_transform=ax.transAxes # bbox_to_anchor 的坐标基准
)
# 绘制条形图
ax_bar=sns.barplot(
data=df_bar,
x="subject", y="signal",
palette='Set2',
ax=ax_bar
)

20240226151427

可以看到,右上角的条形图显得很拥挤,x轴标注相互重叠比较严重,因此,考虑将条形图由纵向变为横向,在 Seaborn 绘图时交换 x 轴和 y 轴就能实现。此外,bar上方的空间也比较大,考虑将x轴的标注标注到bar上方,以进一步节约空间。bar的标注可以通过 ax.bar_label() 函数实现,该函数不仅可以直接标注每个bar的数值,也可以自定义要标注的内容和格式。修改后的代码和结果图如下:

from mpl_toolkits.axes_grid1.inset_locator import inset_axes
import matplotlib.pyplot as plt
# 准备数据
df_fmri = sns.load_dataset("fmri")
df_bar=df_fmri[['subject','signal']].groupby('subject',observed=True).agg('max').reset_index()
# 绘制折线图
ax=sns.lineplot(data=df_fmri, x="timepoint", y="signal", hue="event")
plt.legend(loc='upper left')
# 使用 inset_axes 函数添加一个轴,用来显示条形图
ax_bar = inset_axes(
ax, # 父轴
width='47%', height='52%', # 新轴相对于父轴的长宽比例
loc='lower left', # 新轴的锚点相对于父轴的位置
bbox_to_anchor=(0.5,0.44,1,1), # 新轴的bbox
bbox_transform=ax.transAxes # bbox_to_anchor 的坐标基准
)
# 绘制条形图
ax_bar=sns.barplot(
data=df_bar,
# 交换 x 轴和 y 轴列名实现横向条形图
x="signal", y="subject",
palette='Set2',
ax=ax_bar
)
# 使用 sns 的 bar_label 函数为条形图添加标注
ax_bar.bar_label(
ax_bar.containers[0], # 条形图的 BarContainer 对象
labels=df_bar['subject'], # 要标注的labels,默认为 bar 的数值,此处传入自定义的label序列
label_type='edge', # 标注显示的位置,可选 edge 或 center
padding=2, # 标注与bar之间的距离
# fmt='%.2f' # 标注格式化字符串
fontsize=10 # 设置标注的字体大小
)
# 为了避免标注超出绘图范围,将x轴的绘图范围扩大
plt.xlim(0,0.62)
# 隐藏左侧y轴
ax_bar.yaxis.set_visible(False)
# 去除多余的轴线
sns.despine()

20240226153302

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1659261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【日常开发之插件篇】IDEA plugins 神器助我!!

文章目录 Tabnine 代码自动补全图例 Rainbow Brackets图例 Translation 翻译配置 LombokAlibaba Java Coding Guidelines 阿里巴巴的编码规约检查插件 今早因为老代码的一些bug让我突然觉得Idea的一些插件特别好用,我准备将我平时所用到的一些插件做个推荐以及记录。…

全国智能网联汽车行业产教融合共同体成立, 经纬恒润当选常务理事单位

近日,全国智能网联汽车行业产教融合共同体(以下简称“共同体”)全体成员大会在湖南株洲隆重召开。湖南省教育厅职成处副处长殷劭,国家智能网联汽车创新中心常务副主任、国汽(北京)智能网联汽车研究院有限公…

可以录屏的软件推荐3款,让你的录制更高效!

在信息时代,数字化学习、远程办公等场景越来越普及,录屏软件已经成为了人们生活中不可或缺的一部分。一款好的录屏软件可以帮助用户轻松录制屏幕内容,以便随时回顾或与他人分享。本文将详细介绍三款可以录屏的软件,帮助读者了解它…

百度百科怎么创建自己

百度百科是一个向所有互联网用户开放的平台,人人都可以创建词条。以下是创建自己百度百科的步骤和注意事项。 创建步骤 注册百度账号:首先,你需要注册一个百度账号。如果已经有百度账号,可以直接登录。 选择百科类型:…

FPGA+海思ARM方案,可同时接收HDMI/VGA 两种信号,远程控制

FPGA海思ARM方案,可同时接收HDMI/VGA 两种信号,通过配置输出任一图像或者拼接后的图像 客户应用:无线远程控制 主要特性: 1.支持2K以下任意分辨率格式 2.支持H264压缩图像 3.支持WIFI/4G无线传输 4.支持自适应输入图像分辨率 …

4. 分布式链路追踪客户端工具包Starter设计

前言 本文将从零搭建分布式链路追踪客户端工具包的Starter,并将在后续文章中逐步丰富支持的场景。这里首先将搭建一个最基础的Starter,能提供的功能和1. 看完这篇文章我奶奶都懂Opentracing了一文中的示例demo类似。 相关版本依赖如下。 opentracing-…

三、四线城市也能开店做真人手办定制?会不会亏?

时下,真人手办定制项目加盟热,消费端需求伴随网络效应指数心增加,作为真人手办定制底层技术供应商,博雅仔在与一些创业中的伙伴的沟通过程中了解到,位于一、二线城市的伙伴朋友很有信心,他们坦言&#xff0…

教你免费通配符/泛域名SSL证书怎么申请

申请免费的通配符SSL证书可以让您的主域名及其所有二级子域名都受到安全套接层(SSL)的加密保护,提高网站的整体安全性和用户信任度。以下是一个基于通用流程的简明教程,以JoySSL为例,因为他提供全类别的免费SSL证书。 1、创建证书服务商账号…

STM32自制雾化器

1.1 介绍: 108KHZ雾化器,由驱动模块和雾化器组成,主要作用是把水雾化加湿;它的使用方法有两种;方式1.电源接口供电DC3-4.5V,按下按键,开启雾化器,再按住关;方式2.单片机控制低电平2…

Linux实验 系统管理(二)

实验目的: 了解RPM软件包;掌握使用rpm命令查询、安装、更新、卸载、验证软件包的方法;掌握使用yum命令查询、安装、更新、卸载软件包的方法;了解TAR软件包;掌握使用tar命令创建(并压缩)、查询、…

SSM校园疫情防控系统JAVA计算机毕业设计项目【附源码】

SSM校园疫情防控系统JAVA计算机毕业设计项目 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 &#x1…

python+cv2+gstreamer 推流<500ms低延迟的处理策略

1.一份可用的推流配置 self.out cv2.VideoWriter(appsrc is-liveTrue stream-type0 emit-signalsFalse max-latency1 \ ! videoconvert ! video/x-raw, formatI420 \ ! x264enc speed-presetultrafast bitrate1200 tune"zerolatency" key-int-m…

吉林事业编报名照要求<50kb怎么压缩

吉林事业编报名照要求<50kb怎么压缩

美港通正规股票炒股市场超100亿元!北上资金爆买A股!

查查配今日早盘,A股震荡上扬,上证指数再创年内新高,创业板指、科创50、沪深300等指数均涨超1%。 盘面上,新能源产业全线走强,锂电池、光伏、高压快充、储能等板块涨幅居前,ST、公共交通、通信设备、酿酒等板块小幅调整。 美港通证券以其专业的服务和较低的管理费用在市场中受…

2024年想要开一家抖音小店,需要多少钱?一篇详解!

大家好,我是电商糖果 随着抖音卖货的持续火爆,抖音小店也成了电商行业讨论度最大的项目之一。 不少朋友都想知道,如果今年开抖音小店大概需要多少钱。 糖果做小店的时间也比较长,也经营了多家小店。 对于开一家抖音小店需要多…

【深度学习】【Lora训练0】StabelDiffusion,Lora训练,kohya_ss训练

文章目录 环境数据自动标注kohya_ss BLIP2kohya_ss WD14 后续 资源: (1)训练ui kohya_ss: https://github.com/bmaltais/kohya_ss (2)kohya_ss 的docker 其他docker https://github.com/ashleykleynhans…

书生第三课作业

视频:https://www.bilibili.com/video/BV1QA4m1F7t4/ 教程:https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/readme.md 作业:https://github.com/InternLM/Tutorial/blob/camp2/huixiangdou/homework.md 项目地址:h…

基于Opencv的车牌识别系统(毕业设计可用)

系统架构 图像采集:首先,通过摄像头等设备捕捉车辆图像。图像质量直接影响后续处理的准确性,因此高质量的图像采集是基础。 预处理:对获取的原始图像进行预处理,包括灰度化、降噪、对比度增强和边缘检测等。这些操作旨…

什么是内存泄漏?什么是内存溢出?

我们讲内存溢出时,首先看一下上面这张图,比如说你要往一个500ml的杯子里倒800ml的水,这样肯定是装不下的,水会溢出来,在我们电脑内存中也是一样的,你这个内存中就只有5M的内存空间,可是你要将8M…

如何编辑百度百科并提供参考资料

大家都知道参考资料是创建百度百科中最重要的一步,百度百科只收录可以找到资料来源的事实,参考资料的意义在于,指出该部分内容的来源/出处,从而保障这段内容是客观真实的。 注册和登录百度账号 首先,你需要在百度百科…