尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

顶刊Nature多子图柱状图复现(Python)

顶刊Nature多子图柱状图复现(Python)
📅 发布时间:2026/6/22 0:01:29

结果对比

本文复现的这张图是2021年发表在Nature中的一张多子图柱状图。完整代码获取方法在文末。

论文原图:

img

复现结果:

img

绘制思路

之前在b站找教程的时候,看到这个图,顺手复现一下,b站有视频手把手教了怎么从零到一绘制。我是在b站视频的基础上,完善了一些细节,并将子图的绘制代码封装起来,方便之后同时绘制更多子图(比如8个,12个)。这篇期刊中还有其他的一些图,都比较简单,挺适合新手用来入门Python科研绘图的,之后有时间也会逐一复现的。

https://www.bilibili.com/video/BV1CW4y1W7Cv

这个图的绘制比较简单,就是画出4个柱状图子图然后进一步拼接。

需要注意的就是第二个子图的图例是和另外三个相反的;

可能是因为图幅小,如果使用原生的x轴刻度线会有点越过坐标轴的感觉,因此还需要额外绘制x轴刻度线。

这次就直接通过肉眼识别把柱状图的高度提取出来,作为代码的输入数据。

主要代码如下:

"""
Author: https://github.com/zbhgis
Paper source: https://doi.org/10.1038/s41586-021-03344-2
Paper Figure source: https://www.nature.com/articles/s41586-021-03344-2/figures/6
Last Modified: 2025-12-05
Data: The data used in the code is obtained by visual recognition
"""import numpy as np
import matplotlib.pyplot as plt
import utils# 绘图函数
def create_bar_plot(ax,bar_data=[[0.45, 0.16, 0.11, 0.15, 0.10, 0.08],[0.55, 0.17, 0.08, 0.13, 0.07, 0.06],],bar_label=["Control", "Treatment"],bar_color=["#D82E18", "#5DB1DE"],bar_width=0.25,capsize=3,title="Study 3\nFalse Headline",x_label="Sharing Likelyhood",y_label="Frequency",x_tick_label=["Extremely\nunlikely","Moderately\nunlikely","Slightly\nunlikely","Slightly\nlikely","Moderately\nlikely","Extremely\nlikely",],y_tick_label=np.arange(0, 0.7, 0.1),
):# 画图x = np.arange(len(bar_data[0]))# 绘制子图中的每个柱状图for i in range(0, len(bar_data)):offset = bar_width * (i - (len(bar_data) - 1) / 2)ax.bar(x + offset,bar_data[i],width=bar_width,label=bar_label[i],color=bar_color[i],capsize=capsize,)# 添加标题和轴标签ax.set_title(title)ax.set_xlabel(x_label)ax.set_ylabel(y_label)# 隐藏顶部和右侧的轴线ax.spines["top"].set_visible(False)ax.spines["right"].set_visible(False)# 设置x轴ax.set_xticks(x, x_tick_label)# 添加新的x轴刻度线utils.add_ticks(ax, axis="x", num_ticks=len(bar_data[0]) + 1, ymin=-0.01, ymax=-0.005)# 设置y轴ax.set_yticks(y_tick_label)ax.tick_params(axis="y", which="both", length=0)# 刻度保留两位小数utils.format_ticks(ax, y_zero_format=True, y_precision=2)# 绘制图例ax.legend(frameon=False)if __name__ == "__main__":# 统一绘图样式plt.rcdefaults()plt.rcParams.update({"font.family": "Times New Roman",  # 字体"axes.titlesize": 20,  # 子图标题大小"axes.labelsize": 16,  # 坐标轴标签大小"xtick.labelsize": 8,  # x轴刻度标签大小"ytick.labelsize": 14,  # y轴刻度标签大小"legend.fontsize": 15,  # 图例字体大小"axes.linewidth": 1,  # 坐标轴线宽"lines.linewidth": 1,  # 线宽"legend.handlelength": 0.6,  # 图例长度"legend.handleheight": 0.6,  # 图例高度"legend.handletextpad": 0.3,  # 图例与图例文字距离})# 条形图数据bar_data_list = [[[0.45, 0.16, 0.11, 0.15, 0.10, 0.08], [0.55, 0.17, 0.08, 0.13, 0.07, 0.06]],[[0.33, 0.18, 0.16, 0.17, 0.12, 0.08], [0.32, 0.20, 0.14, 0.19, 0.15, 0.06]],[[0.46, 0.13, 0.09, 0.135, 0.1, 0.12], [0.53, 0.125, 0.085, 0.125, 0.09, 0.09]],[[0.3, 0.19, 0.17, 0.186, 0.12, 0.08], [0.33, 0.17, 0.16, 0.196, 0.128, 0.086]],]# 条形图标签bar_label_strs = ["Control", "Treatment"]# 条形图颜色bar_color_list = [["#D82E18", "#5DB1DE"],["#5DB1DE", "#D82E18"],["#D82E18", "#5DB1DE"],["#D82E18", "#5DB1DE"],]# 标题title_list = ["Study 3\nFalse Headline","Study 3\nTrue Headline","Study 4\nFalse Headline","Study 4\nTrue Headline",]# 标签文本x_label_str = "Sharing Likelyhood"y_label_str = "Frequency"# x轴刻度文本x_tick_label_strs = ["Extremely\nunlikely","Moderately\nunlikely","Slightly\nunlikely","Slightly\nlikely","Moderately\nlikely","Extremely\nlikely",]# y轴刻度数字y_tick_label_strs = np.arange(0, 0.7, 0.1)_, ax_list = utils.add_subplots(tw=10, th=10, wspace=0.3, hspace=0.5)# 创建子图for i in range(0, 4):create_bar_plot(ax_list[i],bar_data_list[i],bar_label_strs,bar_color_list[i],0.25,3,title_list[i],x_label_str,y_label_str,x_tick_label_strs,y_tick_label_strs,)# 导出为jpg文件,默认在当前路径下utils.export_fig()# 导出为指定路径下的指定文件名的tiff文件,dpi为500# utils.export_fig(#     formats="tiff", output_path=r"C:\Users\dell\Desktop\test.tiff", dpi=500# )# # 直接用plt.show()会导致比例失常,所以得看最终导出的图。# plt.show()

完整代码

github仓库链接

https://github.com/zbhgis/QuickPlot

或者公众号后台回复 图表复现

在QuickPlot仓库 plot文件夹的bar文件夹下,过程中使用的其他封装工具函数在utils文件夹下。

img

参考

https://www.bilibili.com/video/BV1CW4y1W7Cv

https://www.nature.com/articles/s41586-021-03344-2/figures/6

相关新闻

  • 26、Linux系统软件管理与安全防护指南
  • Seed-VR2革命性突破:让普通电脑也能实现专业级视频画质增强
  • 从零到一:Atlas组件化框架的完整测试策略与覆盖率保障

最新新闻

  • C语言:编译链接全流程深度解析
  • 深入解析Apache Log4j反序列化漏洞CVE-2017-5645:原理、复现与防御
  • 卖金多赚几百块!广州正规黄金回收Top5,实时跟盘报价无套路压价 - 奢侈品回收评测
  • 山东高考440-500分,能报考辽宁哪些大学?(2026最新) - 品牌2026
  • 终极指南:如何用OBS Virtual Cam插件打造专业级虚拟摄像头解决方案
  • LunaTranslator:如何轻松玩转日文GalGame的终极翻译解决方案

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号