You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Matplotlib复刻《Nature Physics》风格的log-log出版物增长图?

匹配《Nature Physics》风格的Matplotlib图表调整方案

核心样式调整步骤

  • 刻度与坐标轴设置

    • Y轴启用对数刻度并指定范围:执行plt.yscale('log'),再通过plt.yticks([10**2, 10**3, 10**4, 10**5, 10**6])确保每个10的幂次都显示刻度。
    • X轴按十年间隔设置刻度:若年份范围为1900-2020,用plt.xticks(range(1900, 2021, 10))实现。
    • 隐藏顶部和右侧边框:调用ax.spines[['top', 'right']].set_visible(False)(使用Axes对象更灵活)。
  • 网格与突变线设置

    • 添加浅色虚线网格:ax.grid(True, linestyle='--', alpha=0.3, color='lightgray'),可通过axis='y'参数仅保留Y轴网格线,适配对数刻度读数需求。
    • 垂直虚线标记突变点:假设突变年份为1940、1970、2000,循环执行ax.axvline(x=year, linestyle='--', color='gray', alpha=0.6)。
  • 字体与线条样式

    • 全局设置衬线字体:plt.rcParams['font.family'] = 'serif',可指定'Times New Roman'这类期刊常用字体。
    • 调整曲线样式:设置线条为平滑实线,宽度适中,示例:ax.plot(x_data, y_data, linewidth=2, color='#1f77b4')(参考Nature系沉稳色调)。
  • 面板标签添加

    • 在左上角固定位置添加标签:ax.text(0.02, 0.98, 'Web of Science', transform=ax.transAxes, va='top', fontweight='bold'),利用轴坐标确保位置不随图表缩放偏移。

完整示例代码片段

import matplotlib.pyplot as plt
import numpy as np

# 模拟年度论文增长数据
years = np.arange(1900, 2021)
papers = 100 * np.exp(0.03*(years-1900))  # 指数增长模拟

# 初始化绘图对象
fig, ax = plt.subplots(figsize=(8, 6))

# 绘制主趋势曲线
ax.plot(years, papers, linewidth=2, color='#1f77b4')

# 配置Y轴对数刻度
ax.set_yscale('log')
ax.set_ylim(10**2, 10**6)
ax.set_yticks([10**2, 10**3, 10**4, 10**5, 10**6])

# 配置X轴十年间隔刻度
ax.set_xticks(range(1900, 2021, 10))
ax.set_xlim(1900, 2020)

# 隐藏顶部/右侧坐标轴边框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# 添加浅色虚线网格
ax.grid(True, linestyle='--', alpha=0.3, color='lightgray', axis='y')

# 绘制突变点垂直虚线
mutation_years = [1940, 1970, 2000]
for year in mutation_years:
    ax.axvline(x=year, linestyle='--', color='gray', alpha=0.6)

# 添加左上角面板标签
ax.text(0.02, 0.98, 'Web of Science', transform=ax.transAxes, va='top', fontweight='bold', fontfamily='serif')

# 优化布局
plt.tight_layout()
plt.show()

细节优化提示

  • 配色可参考《Nature Physics》官方配色调整线条、网格的颜色值,提升风格匹配度。
  • 调整刻度标签字体大小:plt.rcParams['xtick.labelsize'] = 10、plt.rcParams['ytick.labelsize'] = 10,对齐期刊正文字号。
  • 若需要更精细的刻度标签格式,可使用FuncFormatter自定义对数刻度的显示样式。

内容的提问来源于stack exchange,提问作者joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:30:55