【论文复刻】 堆叠柱状图变形

复刻了一下这篇论文里的fig4a:Impacts of COVID-19 and fiscal stimuli on global emissions and the Paris Agreement | Nature Climate Change

效果图:

主要步骤:

1. 数据准备:随机赋值

2. 数据处理:计算了一个百分数

3. 图像绘制:(1)绘制变形的堆叠柱状图

                      (2)灵活控制文本位置

                      (3)用箭头突出显示变化

详细代码:着急的直接拖到最后有完整代码

步骤一:导入库包及图片存储路径并设置中文字体为宋体,西文为新罗马(没有的库包要先下好奥)

# 导入库及文件
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
# 设置西文字体为新罗马字体,中文宋体
config = {"font.family": 'serif',"font.size": 12,"mathtext.fontset": 'stix',"font.serif": ['SimSun'],}
rcParams.update(config)
rcParams['axes.unicode_minus']=False
###############################################################################

步骤二:前期准备数据

figpath = r'H:/00.csdn/02fig/'# 随机赋值数据
a0 = 140.9
a = np.array([0.3, 0.5, 0.6, 0.4, 0.2])x = range(1, 10, 1)# 计算百分比并进行格式化
proportion1 = a/np.sum(a)*100
proportion1 =['{:.2f}%'.format(i) for i in proportion1]# 文本标签
proportion2 = ['aaaaaaaaaaaa','bbbbbbbbbbbb','cccccccccccc','dddddddddddd','eeeeeeeeeeee','ffffffffffff','gggggggggggg']colors = ['#656565', '#D27D75', '#81BAC8', '#64A99C', '#64A99C', '#A49384']

步骤三:绘制柱状图及其上下文本

###############################################################################
width = 0.8fig = plt.figure(figsize=(8, 8))
ax = fig.add_axes([0.1, 0.25, 0.6, 0.4])# 绘制第一个bar
ax.bar(x[0], a0, width, align='center',  color=colors[0], bottom=0)
ax.text(x[0], 140.1 , 'xxxxxxx', color='w', fontsize=10, rotation=90, horizontalalignment="center")# 绘制第二到五个bar
sum0 = a0
for i in range(0, 5, 1):ax.bar(x[i+1], a[i], width, align='center',  color=colors[i+1], bottom=sum0)sum0 += a[i]if i < 2: ax.text(x[i+1], sum0-a[i]-0.2 , proportion1[i], fontsize=10, rotation=0, horizontalalignment="center")ax.text(x[i+1], sum0+0.1 , proportion2[i], fontsize=10, rotation=90, horizontalalignment="center")elif i >= 2 and i < 5:ax.text(x[i+1], sum0+0.1, proportion1[i], fontsize=10, rotation=0, horizontalalignment="center")ax.text(x[i+1], sum0-a[i]-1.0 , proportion2[i], fontsize=10, rotation=90, horizontalalignment="center")# 添加6 7 文本
ax.text(x[6], sum0-0.5, proportion2[5], fontsize=10, rotation=90, horizontalalignment="center")
ax.text(x[7], sum0-0.5, proportion2[6], fontsize=10, rotation=90, horizontalalignment="center")# 绘制第八个bar
ax.bar(x[8], sum0, width, align='center',  color=colors[0], bottom=0)
ax.text(x[8], 140.1 , 'xxxxxxxxxxxxxxx', color='w', fontsize=10, rotation=90, horizontalalignment="center")

步骤四:设置标题文本,坐标轴信息,及箭头

# 添加标题信息
ax.text(5, 143.5 , 'xxxxxxxxxxx\nyyyyyyyyyyyyyy', color='k', fontsize=10, rotation=0, horizontalalignment="center")# 设置坐标轴信息
ax.set(xlim=(0, 10), xticks=[],ylim=(140, 144), yticks=range(140, 145, 1), yticklabels=range(140, 145, 1), ylabel = 'y轴')# 添加箭头及箭头上方文本
plt.arrow(2,140.2, 6, 0, width=0.01, head_width=0.06, facecolor='gray', edgecolor='gray')
ax.text(5, 140.3 , '+ '+'%3.2f' %((sum0-a0)/a0) + '%', color='k', fontsize=10, rotation=0, horizontalalignment="center")

步骤五:保存图像

###############################################################################
# 保存图像
plt.savefig(figpath+'305 COVID-19 Fig4', dpi=600, bbox_inches = 'tight')
plt.show()

完整代码在这里:

# 导入库及文件
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
# 设置西文字体为新罗马字体,中文宋体
config = {"font.family": 'serif',"font.size": 12,"mathtext.fontset": 'stix',"font.serif": ['SimSun'],}
rcParams.update(config)
rcParams['axes.unicode_minus']=False
###############################################################################
figpath = r'H:/00.csdn/02fig/'# 随机赋值数据
a0 = 140.9
a = np.array([0.3, 0.5, 0.6, 0.4, 0.2])x = range(1, 10, 1)# 计算百分比并进行格式化
proportion1 = a/np.sum(a)*100
proportion1 =['{:.2f}%'.format(i) for i in proportion1]# 文本标签
proportion2 = ['aaaaaaaaaaaa','bbbbbbbbbbbb','cccccccccccc','dddddddddddd','eeeeeeeeeeee','ffffffffffff','gggggggggggg']colors = ['#656565', '#D27D75', '#81BAC8', '#64A99C', '#64A99C', '#A49384']
###############################################################################
width = 0.8fig = plt.figure(figsize=(8, 8))
ax = fig.add_axes([0.1, 0.25, 0.6, 0.4])# 绘制第一个bar
ax.bar(x[0], a0, width, align='center',  color=colors[0], bottom=0)
ax.text(x[0], 140.1 , 'xxxxxxx', color='w', fontsize=10, rotation=90, horizontalalignment="center")# 绘制第二到五个bar
sum0 = a0
for i in range(0, 5, 1):ax.bar(x[i+1], a[i], width, align='center',  color=colors[i+1], bottom=sum0)sum0 += a[i]if i < 2: ax.text(x[i+1], sum0-a[i]-0.2 , proportion1[i], fontsize=10, rotation=0, horizontalalignment="center")ax.text(x[i+1], sum0+0.1 , proportion2[i], fontsize=10, rotation=90, horizontalalignment="center")elif i >= 2 and i < 5:ax.text(x[i+1], sum0+0.1, proportion1[i], fontsize=10, rotation=0, horizontalalignment="center")ax.text(x[i+1], sum0-a[i]-1.0 , proportion2[i], fontsize=10, rotation=90, horizontalalignment="center")# 添加6 7 文本
ax.text(x[6], sum0-0.5, proportion2[5], fontsize=10, rotation=90, horizontalalignment="center")
ax.text(x[7], sum0-0.5, proportion2[6], fontsize=10, rotation=90, horizontalalignment="center")# 绘制第八个bar
ax.bar(x[8], sum0, width, align='center',  color=colors[0], bottom=0)
ax.text(x[8], 140.1 , 'xxxxxxxxxxxxxxx', color='w', fontsize=10, rotation=90, horizontalalignment="center")# 添加标题信息
ax.text(5, 143.5 , 'xxxxxxxxxxx\nyyyyyyyyyyyyyy', color='k', fontsize=10, rotation=0, horizontalalignment="center")# 设置坐标轴信息
ax.set(xlim=(0, 10), xticks=[],ylim=(140, 144), yticks=range(140, 145, 1), yticklabels=range(140, 145, 1), ylabel = 'y轴')# 添加箭头及箭头上方文本
plt.arrow(2,140.2, 6, 0, width=0.01, head_width=0.06, facecolor='gray', edgecolor='gray')
ax.text(5, 140.3 , '+ '+'%3.2f' %((sum0-a0)/a0) + '%', color='k', fontsize=10, rotation=0, horizontalalignment="center")
###############################################################################
# 保存图像
plt.savefig(figpath+'305 COVID-19 Fig4', dpi=600, bbox_inches = 'tight')
plt.show()

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

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

相关文章

机器学习中常用的几种距离——欧式、余弦等

目录 一、欧式距离&#xff08;L2距离&#xff09;二、曼哈顿距离&#xff08;L1距离&#xff09;三、汉明距离四、余弦相似度 一、欧式距离&#xff08;L2距离&#xff09; &#xff08;1&#xff09;二维空间的距离公式&#xff08;三维空间的在这个基础上类推&#xff09;&…

4.StableDiffusion各项参数解读

经过前期的努力&#xff0c;我想大家都已经生成了自己的第一张AI作品&#xff0c;但是充满了随机性&#xff0c;每次都是不一样的&#xff0c;并且有时候生成的图片效果还不是很让人满意&#xff0c;暂且先不要着急&#xff0c;先跟着本篇文章&#xff0c;学习一些每个选项和参…

Google Chrome GPU渲染抓包

非安全模式启动 "C:\Program Files\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors --allow-running-insecure-content --disable-web-security 配置环境 set RENDERDOC_HOOK_EGL0 "C:/Program Files/Google/Chrome/Application/chrom…

Windows本地部署直播录屏利器Bililive-go并实现远程添加直播间录屏

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 1. Bililive-go与套件下载1.1 获取ffmpeg1.2 获取Bililive-go1.3 配置套件 2. 本地运行测试3. 录屏…

【MySQL】事务及其隔离性/隔离级别

目录 一、事务的概念 1、事务的四种特性 2、事务的作用 3、存储引擎对事务的支持 4、事务的提交方式 二、事务的启动、回滚与提交 1、准备工作&#xff1a;调整MySQL的默认隔离级别为最低/创建测试表 2、事务的启动、回滚与提交 3、启动事务后未commit&#xff0c;但是…

MVP产品设计与数据指标

MVP&#xff08;minimum viable product&#xff0c;最小化可行产品&#xff09;概念最早由埃里克莱斯提出&#xff0c;刊载于哈弗商业评论&#xff0c;并有出版物《精益创业》 和常规产品不同&#xff0c;MVP更侧重于对未知市场的勘测&#xff0c;用最小的代价接触客户的方法…

学习Nginx(一):基础

介绍 Nginx是一个高性能的HTTP和反向代理的web服务器&#xff0c;它的设计重点是高并发、高性能和低内存消耗。它常被用于提供静态内容、负载均衡和作为Web服务器。 Nginx具有以下功能和特点&#xff1a; 静态文件服务&#xff1a;作为一个Web服务器&#xff0c;Nginx可以处…

GPT-4o可以用了

方法&#xff1a;挂日本/新加坡的梯子就可以了&#xff0c;打开就会弹出以下的弹窗。不过不知道可以用多久呢&#xff1f; 2024/5/15

木里风景文化|基于SSM+vue的木里风景文化管理平台的设计与实现(源码+数据库+文档)

木里风景文化管理平台 目录 基于SSM&#xff0b;vue的木里风景文化管理平台的设计与实现 一、前言 二、系统设计 三、系统功能设计 1 系统功能模块 2 管理员功能模块 3 用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源…

全知人工智能的黎明:OpenAI 革命性的 GPT-4o 揭晓

全知人工智能的黎明&#xff1a;OpenAI 革命性的 GPT-4o 揭晓 在一项突破性的公告中&#xff0c;OpenAI 推出了其最新的旗舰人工智能模型 GPT-4o&#xff0c;该模型有望彻底改变我们与人工智能交互的方式。这种无所不知的人工智能模型拥有前所未有的能力&#xff0c;从实时翻译…

Redis-持久化操作-AOF

持久化操作-AOF AOF是什么&#xff1f; 以日志的形式来记录每个写操作&#xff0c;将Redis执行过的所有写指令记录下来&#xff08;读操作不记录&#xff09;&#xff0c;只允许加文 件但不可以改写文件&#xff0c;redis启动之初会读取该文件重新构建数据&#xff0c;换言之…

Axure10_win安装教程(安装、汉化、授权码,去弹窗)

1.下载Axure10 链接&#xff1a;https://pan.baidu.com/s/1fc8Bgyic8Ct__1IOv-afUg 提取码&#xff1a;9qew 2.安装Axure10 因为我的电脑是Windows操作系统&#xff0c;所以我下载的AxureRP-Setup-Beta v10.0.0.3816 (Win).exe 一直点下一步就行 3.Axure10中文 打开Axure…

LangChain-Chatchat 实践

目录 1. 说明 相关路径: 安装环境: 2. 安装 2.1 工具准备 2.2 资料准备 2.3 执行 3. 测试 3.1 LLM对话 3.2 知识库 3.3 API 接口 参考 1. 说明 比较了几个AI LLM的集成应用工具(比如Quivr, Dify, one-api), 还是LangChain-Chatchat更符合我的需要: 支持私有化部署…

RS485和RS232区别

RS485和RS232接口在物理外观上的区别主要在于连接器的类型和接线方式上。这两种串行通讯接口虽然在功能上有所不同&#xff0c;但外观上也有一些显著的特点。 连接器类型&#xff1a; RS232 接口通常使用DB9或DB25类型的连接器。DB9是较为常见的&#xff0c;拥有9个针脚&#x…

Adaboost集成学习 | Matlab实现基于CNN-BiLSTM-Adaboost集成学习时间序列预测(股票价格预测)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习 | Matlab实现基于CNN-BiLSTM-Adaboost集成学习时间序列预测(股票价格预测) 模型设计 融合Adaboost的CNN-BiLSTM模型的时间序列预测,下面是一个基本的框架。 数据准备: 收集并整理用于时…

卷积神经网络CNN的运行过程、常见术语与问题

目录 一、CNN运行过程 1、卷积&#xff08;Convolution&#xff09; 2、激活函数&#xff08;activation function&#xff09; 3、池化&#xff08;pooling&#xff09; 3.1 池化操作 3.2 池化过程 3.3 池化后结果 4、Flatten 5、全连接层 Flatten层的操作 全连接层…

语义分割——高分卫星土地覆盖数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

2.3 应用集成技术

第2章 信息技术知识 2.3 应用集成技术 2.3.1 数据库与数据仓库技术 数据库 以单一的数据源即数据库为中心进行事务处理、批处理、决策分析等各种数据处理工作操作型处理也称事务处理&#xff0c;指的是对联机数据库的日常操作&#xff0c;通常是对数据库中记录的查询和修改…

Vitis HLS 学习笔记--资源绑定-使用URAM

目录 1. 简介 2. 代码解析 2.1 代码总览 2.2 优化指令 2.3 综合报告 3. 总结 1. 简介 Vivado IP 流程中的 AP_Memory&#xff0c;它用于与存储器资源&#xff08;如 BRAM 和URAM&#xff09;进行通信。不同于全局存储器&#xff08;DDR&#xff09;&#xff0c;对此专用…

聊一聊Spring为什么需要三级缓存

写在文章开头 笔者在很早整理过一篇关于AOP的源码的文章,阅读起来晦涩难懂,在复盘时就有了想重构的想法,所以就借着这一话题重新聊一聊Spring中的三级缓存。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源项目 Java Guide …