当前位置:首页>python>《15节课Python绘图从入门到精通》1——图纸设定实操

《15节课Python绘图从入门到精通》1——图纸设定实操

  • 2026-04-16 07:02:54
《15节课Python绘图从入门到精通》1——图纸设定实操
本节核心定位:夯实Python绘图基础,聚焦图纸设定这一核心前提,从基础画布创建,到期刊标准适配、子图布局、全局风格锁定,再到文件导出验证,全程围绕实操落地展开。

前置准备:提前安装必备库,未安装的用户先执行安装代码。核心依赖为Matplotlib、NumPy,前者是绘图核心库,后者负责辅助计算,后续章节高频使用,本节提前铺垫。安装代码可直接复制执行,适配Windows、Mac、Linux全系统。

# 前置安装代码,首次使用必执行,已安装可跳过
# 安装Matplotlib,负责所有画布与图形绘制
# 安装NumPy,辅助完成数值计算与参数换算
pip install matplotlib numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
# 注释:选用清华镜像源提升安装速度,规避默认源卡顿问题
# 安装失败可直接删除镜像链接,用默认源重试

核心说明:本节所有代码基于Python 3.8及以上版本编写,兼容3.8到3.11所有稳定版本。代码可直接复制到PyCharm、Jupyter Notebook、VS Code等编辑器运行,无兼容性障碍。每个实操任务都搭配基础版、进阶版两套代码,基础版简洁易懂,适配新手入门,进阶版覆盖更多应用场景,满足学术绘图与个性化定制需求。

实操任务I:生成单栏期刊标准空白图

学术期刊单栏绘图,通用标准尺寸为3.5英寸宽、2.5英寸高。这个尺寸能保证图像在期刊页面内合理排布,避免过大过小或比例失调。本任务拆解为标准尺寸创建、尺寸单位转换、背景色设置、异常尺寸处理四个场景,每个场景配套完整代码与结果分析,兼顾新手入门与进阶适配。

基础版:标准单栏空白图

# 导入核心库,Matplotlib的pyplot模块简写为plt,是行业通用写法
import matplotlib.pyplot as plt
# 导入NumPy,提前导入避免后续重复操作
import numpy as np

# 创建空白画布,figsize参数指定尺寸,单位固定为英寸
# fig代表整体画布对象,后续所有绘图操作都依托该对象
# ax代表坐标轴对象,负责控制坐标轴、刻度等细节
fig, ax = plt.subplots(figsize=(3.52.5))

# 隐藏全部坐标轴,空白画布无需显示刻度与边框,符合期刊规范
ax.axis('off')

# 本地查看画布效果,公众号推文可省略此步,直接导出文件
plt.show()

# 导出矢量PDF格式,适配期刊投稿,300dpi是学术投稿最低分辨率要求
# bbox_inches设置为tight,自动裁剪多余空白,避免导出后留白过大
# pad_inches保留微量边缘留白,防止图像边缘被截断
fig.savefig('单栏标准空白图.pdf', dpi=300, bbox_inches='tight', pad_inches=0.05)
# 同步导出PNG格式,适配公众号推文、PPT展示,兼顾不同使用场景
fig.savefig('单栏标准空白图.png', dpi=300, bbox_inches='tight', pad_inches=0.05)

运行代码后,桌面会弹出3.5×2.5英寸的纯白画布窗口,无任何坐标轴与刻度,完全匹配单栏期刊空白图基础要求。导出的PDF属于矢量图,用Adobe Acrobat、WPS打开后,无限放大也不会出现锯齿模糊,后续添加的文字可直接编辑,完全符合期刊投稿的清晰度标准。PNG为位图格式,300dpi分辨率满足公众号与PPT使用需求,放大至150%依旧清晰,不会出现像素块。

新手容易混淆尺寸单位,figsize参数单位是英寸,不是厘米或像素。误将厘米当作英寸使用,会导致画布尺寸超标,无法适配期刊排版,1英寸约等于2.54厘米,3.5英寸换算后约8.89厘米,牢记这个换算比例能避开基础错误。

进阶版1:尺寸单位转换(厘米转英寸,适配多元需求)

多数新手习惯用厘米描述尺寸,部分期刊也会标注厘米规格,需要提前完成厘米到英寸的换算。手动计算容易出错,本节封装通用转换函数,一键完成换算,同时覆盖标准尺寸、自定义尺寸两种场景。

import matplotlib.pyplot as plt
import numpy as np

# 定义尺寸转换函数,输入厘米数值,输出英寸数值,后续可直接复用
defcm_to_inch(cm):
return cm / 2.54

# 场景一,适配期刊标准,8.9厘米宽、6.35厘米高,对应3.5×2.5英寸
width_cm = 8.9
height_cm = 6.35
width_inch = cm_to_inch(width_cm)
height_inch = cm_to_inch(height_cm)
# 控制台打印换算结果,方便核对尺寸准确性
print(f"转换后尺寸:宽{width_inch:.2f}英寸,高{height_inch:.2f}英寸")

# 基于换算后的英寸尺寸创建画布
fig, ax = plt.subplots(figsize=(width_inch, height_inch))
ax.axis('off')

# 场景二,自定义尺寸,10厘米宽、8厘米高,适配公众号封面、非标准期刊绘图
width_cm2 = 10
height_cm2 = 8
fig2, ax2 = plt.subplots(figsize=(cm_to_inch(width_cm2), cm_to_inch(height_cm2)))
ax2.axis('off')

# 同时显示两个画布,直观对比尺寸差异
plt.show()

# 分类导出,单独命名避免文件覆盖
fig.savefig('标准尺寸空白图(厘米转换).pdf', dpi=300, bbox_inches='tight')
fig2.savefig('自定义尺寸空白图(10cm×8cm).png', dpi=300, bbox_inches='tight')

代码运行后,控制台会直接打印精准换算结果,确认尺寸符合期刊要求。弹出的两个画布,一个对应期刊标准尺寸,效果和基础版完全一致,另一个为自定义大尺寸。转换函数可全程复用,后续遇到尺寸换算需求,直接调用即可,无需重复编写代码。不同期刊的单栏尺寸略有差异,只需调整输入的厘米或英寸数值,无需改动核心代码,灵活适配各类规范。

进阶版2:空白图画布背景色设置(适配多元排版场景)

默认画布为纯白色,部分场景需要调整背景色,比如公众号浅色排版、期刊特殊版式、多图拼接需求。本节覆盖纯色背景、透明背景、渐变背景三种常用模式,满足不同展示需求。

import matplotlib.pyplot as plt
import numpy as np

# 固定基础尺寸,3.5×2.5英寸
figsize = (3.52.5)

# 纯色背景,选用浅灰色,适配公众号浅色推文,缓解纯白背景的刺眼感
fig1, ax1 = plt.subplots(figsize=figsize)
ax1.axis('off')
# 通过facecolor参数设置背景,支持颜色名称、十六进制色码、RGB值
fig1.patch.set_facecolor('
#F5F5F5')

# 透明背景,适配期刊封面、多图拼接,避免背景色干扰其他元素
fig2, ax2 = plt.subplots(figsize=figsize)
ax2.axis('off')
fig2.patch.set_facecolor('none')
# 导出时必须开启transparent参数,否则透明背景会自动转为白色
fig2.savefig('透明背景空白图.pdf', dpi=300, bbox_inches='tight', transparent=True)

# 渐变背景,适配公众号封面、个性化展示,做浅蓝到白色的线性渐变
fig3, ax3 = plt.subplots(figsize=figsize)
ax3.axis('off')
# 生成100个网格点,保证渐变过渡平滑,无断层感
x = np.linspace(01100)
y = np.linspace(01100)
X, Y = np.meshgrid(x, y)
# 构建RGB渐变矩阵,控制色彩从左至右平滑过渡
gradient = np.dstack((X, Y, np.ones_like(X)))
gradient[:, :, 0] = 0.537 + 0.463 * X
gradient[:, :, 1] = 0.808 + 0.192 * X
gradient[:, :, 2] = 0.922 + 0.078 * X
# 让渐变覆盖整个画布,无边缘留白
ax3.imshow(gradient, extent=[0101], aspect='auto')

# 一次性显示三个画布,对比不同背景效果
plt.show()

# 分类导出文件,做好命名区分
fig1.savefig('浅灰色背景空白图.png', dpi=300, bbox_inches='tight')
fig3.savefig('渐变背景空白图.png', dpi=300, bbox_inches='tight')

浅灰色背景视觉柔和,手机端阅读更舒适,不会影响后续图形与文字的清晰度。

透明背景导出后,嵌入Word、期刊排版软件时,会自动适配文档底色,无白色边框干扰,适合多图拼接场景。

渐变背景色彩过渡平滑,视觉层次更丰富,可按需调整渐变方向与色彩,改成竖向渐变或其他色系。

设置背景时要注意,针对整体画布用fig.patch.set_facecolor,针对坐标轴内部用ax.patch.set_facecolor,两者适用场景不同,混用会导致背景只覆盖局部区域。

进阶版3:异常尺寸处理(提升代码鲁棒性,规避报错)

新手输入尺寸时,常出现输入字符串、负数、零值等错误,导致代码直接崩溃。本节封装带异常捕获的画布创建函数,遇到错误输入时给出清晰提示,不中断程序运行,帮新手快速排查问题,这套函数可全程复用。

import matplotlib.pyplot as plt
import numpy as np

# 定义带异常处理的画布创建函数,通用复用性强
defcreate_blank_fig(width, height):
# 捕获非数值输入错误,比如字符串、列表类型
ifnot isinstance(width, (int, float)) ornot isinstance(height, (int, float)):
        print("错误:尺寸需为整数或浮点数,禁止输入字符串、列表等格式")
returnNone
# 捕获负数、零值输入错误,尺寸必须为正数值
if width <= 0or height <= 0:
        print(f"错误:尺寸需为正数,当前宽{width}、高{height}不达标,请重新输入")
returnNone
# 无异常则正常创建画布
    fig, ax = plt.subplots(figsize=(width, height))
    ax.axis('off')
return fig, ax

# 测试三类异常场景
# 输入字符串类型宽度
fig_error1, ax_error1 = create_blank_fig("3.5"2.5)
# 输入负数宽度
fig_error2, ax_error2 = create_blank_fig(-3.52.5)
# 输入零值高度
fig_error3, ax_error3 = create_blank_fig(3.50)
# 正常尺寸输入,作为对照
fig_normal, ax_normal = create_blank_fig(3.52.5)

# 仅显示正常尺寸画布,异常场景不生成画布
if fig_normal isnotNone:
    plt.show()
    fig_normal.savefig('正常尺寸空白图(带异常处理).pdf', dpi=300, bbox_inches='tight')

代码运行后,控制台会依次弹出三条错误提示,对应非数值、负数、零值三类常见错误,异常场景不会生成画布,也不会导致程序中断。

新手可根据提示快速修改参数,不影响正常流程推进。正常尺寸的画布生成与导出效果,和基础版完全一致,异常处理代码不干扰核心功能。后续所有绘图任务,都可调用这个函数,养成规范编码习惯,减少基础报错。

实操任务2:创建2行2列子图,精细调整子图间距、边框留白与整体布局

学术绘图常需要多子图拼接展示多组数据,2行2列是最常用的布局形式。本节覆盖基础子图创建、间距调整、边框留白设置、非对称布局适配、共享坐标轴五大场景,针对性解决子图拥挤、标签重叠、布局混乱等新手高频问题。

 基础版:标准2×2子图创建(新手必学)

import matplotlib.pyplot as plt
import numpy as np

# ========== 中文字体设置(关键修改) ==========
plt.rcParams['font.sans-serif'] = ['SimHei']        # 使用黑体(Windows 自带)
# plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 备选:微软雅黑
# plt.rcParams['font.sans-serif'] = ['Songti SC']        # macOS 宋体
plt.rcParams['axes.unicode_minus'] = False# 解决负号 '-' 显示为方块的问题
# ==========================================

# 创建2行2列子图,整体画布尺寸设为8×10英寸,避免子图拥挤
# sharex与sharey默认关闭,子图独立显示坐标轴,适合新手入门
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(810), sharex=False, sharey=False, squeeze=True)

# 子图索引遵循从上到下、从左到右的顺序,行索引、列索引均从0开始
# 依次为四个子图添加简易标题,方便区分
axes[00].set_title('子图1(0,0)')
axes[01].set_title('子图2(0,1)')
axes[10].set_title('子图3(1,0)')
axes[11].set_title('子图4(1,1)')

# 循环为所有子图添加基础坐标轴标签,模拟实际绘图场景
for i in range(2):
for j in range(2):
        axes[i, j].set_xlabel('X轴')
        axes[i, j].set_ylabel('Y轴')

# 本地查看布局效果
plt.show()

# 导出子图,适配期刊与公众号使用
fig.savefig('基础2×2子图.png', dpi=300, bbox_inches='tight', pad_inches=0.1)

运行后生成8×10英寸画布,四个子图均匀排布,标题与坐标轴标签清晰,无明显拥挤感。

子图索引规则简单易记,后续修改单个子图样式时,直接对应行列索引即可,不易混淆。整体画布高度设为10英寸,刚好适配2行子图,高度过低会直接导致标题、标签重叠,新手需注意整体尺寸与子图数量的匹配度。

进阶版1:子图间距精细调整(解决拥挤重叠问题)

默认子图间距较窄,遇到长标题、长标签时,容易出现文字重叠。本节通过水平间距、垂直间距两个核心参数,实现紧凑、宽松、自适应三种布局模式,适配不同内容长度。

import matplotlib.pyplot as plt
import numpy as np


# ========== 中文字体设置(关键修改) ==========
plt.rcParams['font.sans-serif'] = ['SimHei']        # 使用黑体(Windows 自带)
# plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 备选:微软雅黑
# plt.rcParams['font.sans-serif'] = ['Songti SC']        # macOS 宋体
plt.rcParams['axes.unicode_minus'] = False# 解决负号 '-' 显示为方块的问题
# ==========================================

# 基础布局参数与基础版保持一致
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(3.55), sharex=False, sharey=False)

# 模拟长标题、长标签场景,测试间距调整效果,适当缩小字体适配子图
axes[00].set_title('子图1:实验对照组数据分布', fontsize=8)
axes[01].set_title('子图2:实验处理组1数据分布', fontsize=8)
axes[10].set_title('子图3:实验处理组2数据分布', fontsize=8)
axes[11].set_title('子图4:三组数据对比分析', fontsize=8)

# 循环添加长坐标轴标签,同步缩小刻度字体
for i in range(2):
for j in range(2):
        axes[i, j].set_xlabel('实验指标(单位:mg/L)', fontsize=7)
        axes[i, j].set_ylabel('数据值(单位:μg)', fontsize=7)
        axes[i, j].tick_params(labelsize=6)

# 核心间距调整,用plt.subplots_adjust控制,灵活度高
# wspace代表水平间距,hspace代表垂直间距,数值越大间距越宽
# 紧凑布局,节省画布空间,适合内容简洁的场景
plt.subplots_adjust(wspace=0.2, hspace=0.3)

# 宽松布局,拉大间距,避免长文本重叠,取消注释即可切换
# plt.subplots_adjust(wspace=0.4, hspace=0.5)

# 自适应布局,系统自动匹配内容调整间距,新手优先选用
# plt.tight_layout()

# 显示并导出
plt.show()
fig.savefig('调整间距的2×2子图.png', dpi=300, bbox_inches='tight', pad_inches=0.1)

紧凑布局下,子图间距适中,长标题与标签无重叠,兼顾清晰度与空间利用率,适合期刊排版。宽松布局拉大横竖间距,彻底避免文字重叠,适合内容复杂的场景,但会占用更多画布空间,可适当放大整体画布尺寸配合。自适应布局无需手动调参,系统自动优化间距,新手入门首选,缺点是精准度略低,需要精细化排版时,还是建议手动调整参数。长文本场景下,配合缩小字体,既能避开重叠,又能保证内容可读性,是学术绘图的常用技巧。

进阶版2:边框留白精细设置

默认画布四周留白偏大,导出后浪费页面空间,期刊排版要求精简留白,公众号则需要适中留白提升视觉舒适度。本节通过左、右、上、下四个留白参数,实现精简留白、宽松留白、自定义留白三种模式。

import matplotlib.pyplot as plt
import numpy as np


# ========== 中文字体设置(关键修改) ==========
plt.rcParams['font.sans-serif'] = ['SimHei']        # 使用黑体(Windows 自带)
# plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 备选:微软雅黑
# plt.rcParams['font.sans-serif'] = ['Songti SC']        # macOS 宋体
plt.rcParams['axes.unicode_minus'] = False# 解决负号 '-' 显示为方块的问题
# ==========================================

# 创建基础2×2子图
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(3.55), sharex=False, sharey=False)

# 添加基础标题与标签
for i in range(2):
for j in range(2):
        axes[i, j].set_title(f'子图({i},{j})', fontsize=8)
        axes[i, j].set_xlabel('X轴', fontsize=7)
        axes[i, j].set_ylabel('Y轴', fontsize=7)

# 先调整子图内部间距,避免拥挤
plt.subplots_adjust(wspace=0.5, hspace=0.5)

# 核心留白调整,left、right、top、bottom分别控制四边留白比例
# 数值范围均为0到1,左留白小于右留白,下留白小于上留白,否则报错
# 精简留白,适配期刊,最大化利用画布空间
plt.subplots_adjust(left=0.12, right=0.95, top=0.92, bottom=0.1)

# 宽松留白
# plt.subplots_adjust(left=0.15, right=0.9, top=0.88, bottom=0.15)

# 自定义留白,左侧加大留白,预留全局图例位置
# plt.subplots_adjust(left=0.2, right=0.85, top=0.85, bottom=0.15)

# 显示导出
plt.show()
fig.savefig('精简留白2×2子图(期刊适配).pdf', dpi=300, bbox_inches='tight')

执行结果如下:

精简留白模式下,四边留白大幅缩减,子图占据核心画布空间,符合期刊紧凑排版的要求,嵌入期刊页面无多余空白。宽松留白模式四周留白均匀。自定义留白可按需预留空间,比如左侧加大留白放置全局图例,无需每个子图重复添加图例,既节省空间又保持布局整齐。调参时牢记四边参数的数值关系,避免出现逻辑错误导致报错,新手可先沿用推荐参数,再根据实际需求微调。

进阶版3:非对称2×2子图布局

标准对称布局无法突出核心数据,实际场景常需要重点子图尺寸更大,实现主次分明的展示效果。本节通过GridSpec实现灵活非对称布局,也提供新手简化版方案,兼顾专业性与易用性。

import matplotlib.pyplot as plt
import numpy as np

# ========== 中文字体设置(关键修改) ==========
plt.rcParams['font.sans-serif'] = ['SimHei']        # 使用黑体(Windows 自带)
# plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 备选:微软雅黑
# plt.rcParams['font.sans-serif'] = ['Songti SC']        # macOS 宋体
plt.rcParams['axes.unicode_minus'] = False# 解决负号 '-' 显示为方块的问题
# ==========================================



# 专业方案,用GridSpec实现非对称布局,精准控制行列比例
# 先创建空白画布,不直接生成子图
fig = plt.figure(figsize=(810))
# 定义2行2列网格,第一行高度设为第二行的1.5倍,突出重点
gs = fig.add_gridspec(nrows=2, ncols=2, width_ratios=[11], height_ratios=[1.51], hspace=0.3, wspace=0.2)

# 分配子图区域,第一行跨两列作为重点展示区,第二行均分两列
ax1 = fig.add_subplot(gs[0, :])
ax2 = fig.add_subplot(gs[10])
ax3 = fig.add_subplot(gs[11])

# 重点子图标题稍大,突出核心内容
ax1.set_title('重点展示:三组数据整体对比', fontsize=9)
ax1.set_xlabel('实验分组', fontsize=8)
ax1.set_ylabel('平均数据值', fontsize=8)

# 普通子图保持常规字号
ax2.set_title('子图2:对照组', fontsize=8)
ax2.set_xlabel('X轴', fontsize=7)
ax2.set_ylabel('Y轴', fontsize=7)

ax3.set_title('子图3:处理组', fontsize=8)
ax3.set_xlabel('X轴', fontsize=7)
ax3.set_ylabel('Y轴', fontsize=7)

# 调整整体留白
plt.subplots_adjust(left=0.12, right=0.95, top=0.92, bottom=0.1)


plt.show()
fig.savefig('非对称2×2子图.png', dpi=300, bbox_inches='tight')

执行结果如下:

GridSpec方案可精准控制行高列宽比例,重点子图占比更大,适合展示核心结论,普通子图补充细节,层次分明。这种布局适配学术论文整体结果加分项结果的展示逻辑。新手简化版操作更简单,通过删除合并子图快速实现非对称效果,缺点是无法精准控制比例,适合简单场景。非对称布局能有效提升信息传递效率,让读者快速抓住核心内容,避免多子图平铺导致的重点模糊。

进阶版4:子图共享坐标轴

多子图展示同类数据时,坐标轴指标与刻度范围一致,重复绘制会让布局杂乱。共享坐标轴可省略重复标签与刻度,让版面更简洁,同时保证数据对比的一致性。本节覆盖共享X轴、共享Y轴、共享双轴三种模式。

import matplotlib.pyplot as plt
import numpy as np

# ========== 中文字体设置(关键修改) ==========
plt.rcParams['font.sans-serif'] = ['SimHei']        # 使用黑体(Windows 自带)
# plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 备选:微软雅黑
# plt.rcParams['font.sans-serif'] = ['Songti SC']        # macOS 宋体
plt.rcParams['axes.unicode_minus'] = False# 解决负号 '-' 显示为方块的问题
# ==========================================



# 共享X轴,所有子图X轴指标一致,仅下方子图显示X轴标签
fig1, axes1 = plt.subplots(nrows=2, ncols=2, figsize=(810), sharex='all', sharey=False)
for i in range(2):
for j in range(2):
        axes1[i, j].set_title(f'子图({i},{j})', fontsize=8)
        axes1[i, j].set_ylabel(f'指标{i+j+1}(mg/L)', fontsize=7)
# 仅最下方两个子图保留X轴标签
axes1[10].set_xlabel('时间(min)', fontsize=7)
axes1[11].set_xlabel('时间(min)', fontsize=7)
plt.subplots_adjust(wspace=0.5, hspace=0.3, left=0.12, right=0.95, top=0.92, bottom=0.1)
plt.show()
fig1.savefig('共享X轴的2×2子图.png', dpi=300, bbox_inches='tight')

# 共享Y轴,所有子图Y轴指标一致,仅左侧子图显示Y轴标签
fig2, axes2 = plt.subplots(nrows=2, ncols=2, figsize=(810), sharex=False, sharey='all')
for i in range(2):
for j in range(2):
        axes2[i, j].set_title(f'子图({i},{j})', fontsize=8)
        axes2[i, j].set_xlabel(f'指标{i+j+1}(μg)', fontsize=7)
# 仅最左侧两个子图保留Y轴标签
axes2[00].set_ylabel('数值', fontsize=7)
axes2[10].set_ylabel('数值', fontsize=7)
plt.subplots_adjust(wspace=0.5, hspace=0.3, left=0.12, right=0.95, top=0.92, bottom=0.1)
plt.show()
fig2.savefig('共享Y轴的2×2子图.png', dpi=300, bbox_inches='tight')

# 共享双轴,X轴Y轴全部统一,仅保留一组坐标轴标签
fig3, axes3 = plt.subplots(nrows=2, ncols=2, figsize=(810), sharex='all', sharey='all')
for i in range(2):
for j in range(2):
        axes3[i, j].set_title(f'子图({i},{j})', fontsize=8)
# 仅最下方显示X轴标签,最左侧显示Y轴标签
axes3[10].set_xlabel('时间(min)', fontsize=7)
axes3[00].set_ylabel('数值(mg/L)', fontsize=7)
plt.subplots_adjust(wspace=0.5, hspace=0.3, left=0.12, right=0.95, top=0.92, bottom=0.1)
plt.show()
fig3.savefig('共享双轴的2×2子图.png', dpi=300, bbox_inches='tight')

共享X轴适合展示同一时间维度下的不同指标变化,省去重复的时间标签,版面更清爽。

共享Y轴适合展示同一数值维度下的不同分组对比,保证刻度统一,数据对比更直观。

共享双轴是最简洁的模式,适合多组同类数据横向对比,学术论文中应用最广泛。

共享坐标轴后,调整任意一个子图的刻度范围,其余子图会同步更新,无需逐个修改,既提升效率,又避免刻度不一致导致的对比误差。

实操任务3:全局设置绘图风格,锁定Times New Roman字体、线条粗细与坐标轴样式

学术期刊对绘图风格有严格规范,统一字体、线条、坐标轴样式,能有效提升审稿通过率。公众号绘图也需要风格统一,保证视觉连贯性。本节通过全局参数设置,实现一次配置全程复用,避开重复编写样式代码,同时适配Windows、Mac、Linux全系统。

基础版:全局字体设置(锁定Times New Roman,适配学术规范)

import matplotlib.pyplot as plt
import numpy as np

# 全局字体配置,通过rcParams参数实现,一次设置全程生效
plt.rcParams['font.family'] = 'Times New Roman'
# 全局默认字号设为8,适配子图尺寸,后续可单独微调
plt.rcParams['font.size'] = 8
# 关闭unicode_minus,解决负号显示异常的问题
plt.rcParams['axes.unicode_minus'] = False
# 如需添加中文,比如公众号推文,取消下方注释,实现中英字体分离
# plt.rcParams['font.sans-serif'] = ['SimHei', 'Times New Roman']

# 测试全局字体效果,创建共享双轴的2×2子图
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(3.55), sharex='all', sharey='all')

# 循环添加英文标题与标签,验证全局字体生效
for i in range(2):
for j in range(2):
        axes[i, j].set_title(f'Group {i+j+1} Results', fontsize=9)
        axes[i, j].set_xlabel('Time (min)', fontsize=8)
        axes[i, j].set_ylabel('Concentration (mg/L)', fontsize=8)
        axes[i, j].tick_params(labelsize=7)

# 调整布局间距与留白
plt.subplots_adjust(wspace=0.2, hspace=0.3, left=0.12, right=0.95, top=0.92, bottom=0.1)
plt.show()
fig.savefig('全局Times New Roman字体子图.pdf', dpi=300, bbox_inches='tight')

执行结果如下:

Times New Roman是大多数学术期刊指定的英文字体,全局设置后,标题、坐标轴标签、刻度文字全部统一为该字体,符合期刊规范。代码运行后,所有文字样式一致,无字体错乱问题,负号显示正常,不会出现方块乱码。需要添加中文时,开启中英分离配置,中文用黑体,英文保留Times New Roman,兼顾双语展示需求。全局字体设置放在代码开头,后续所有绘图任务自动沿用,无需重复配置,大幅提升编码效率。

进阶版1:全局线条粗细与样式设置(统一绘图规范)

import matplotlib.pyplot as plt
import numpy as np

# 延续全局字体设置
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['font.size'] = 8
plt.rcParams['axes.unicode_minus'] = False

# 全局线条配置,适配学术绘图规范
plt.rcParams['lines.linewidth'] = 0.8
plt.rcParams['axes.linewidth'] = 0.8
# 全局线条样式,默认实线,可按需改为虚线、点线
plt.rcParams['lines.linestyle'] = '-'
# 全局标记点大小,适配小尺寸子图
plt.rcParams['lines.markersize'] = 3

# 测试线条效果,绘制简易曲线
fig, ax = plt.subplots(figsize=(3.52.5))
x = np.linspace(010100)
y = np.sin(x)
ax.plot(x, y, label='Sin Curve')
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.legend(frameon=False, fontsize=7)
plt.tight_layout()
plt.show()
fig.savefig('全局线条样式测试图.pdf', dpi=300, bbox_inches='tight')

执行结果如下:

学术绘图要求线条粗细均匀,避免过粗或过细影响清晰度。全局设置线条宽度为0.8,坐标轴边框宽度同步匹配,整体视觉协调。标记点大小设为3,适配小尺寸画布,不会过大遮挡数据,也不会过小难以辨认。全局线条样式默认实线,满足常规绘图需求,需要特殊线条时,可单独修改单个图形样式,不影响全局规范。统一线条样式后,整套绘图作品风格一致,符合学术出版的审美要求,也能减少审稿人对格式的质疑。

进阶版2: 全局坐标轴样式精细化调整(适配期刊审稿要求)

import matplotlib.pyplot as plt
import numpy as np

# 继承全局字体、线条配置
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['font.size'] = 8
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['lines.linewidth'] = 0.8
plt.rcParams['axes.linewidth'] = 0.8

# 全局坐标轴刻度设置
plt.rcParams['xtick.major.width'] = 0.8
plt.rcParams['ytick.major.width'] = 0.8
plt.rcParams['xtick.major.size'] = 3
plt.rcParams['ytick.major.size'] = 3
# 关闭多余刻度,仅保留主刻度
plt.rcParams['xtick.minor.visible'] = False
plt.rcParams['ytick.minor.visible'] = False
# 刻度朝向画布内侧,符合期刊规范
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

# 测试坐标轴样式
fig, ax = plt.subplots(figsize=(3.52.5))
ax.set_xlabel('Variable')
ax.set_ylabel('Value')
ax.set_xlim(010)
ax.set_ylim(01)
plt.tight_layout()
plt.show()
fig.savefig('全局坐标轴样式测试图.pdf', dpi=300, bbox_inches='tight')

执行结果如下:

期刊审稿对坐标轴细节要求严苛,刻度宽度、长度、朝向都有规范。全局设置主刻度宽度与线条一致,长度适中,关闭次要刻度,避免画面杂乱。刻度朝向画布内侧,是学术绘图的通用规范,让版面更整洁。所有坐标轴参数统一后,无需逐个子图调整,大幅减少格式修改工作量。这套坐标轴配置,能直接适配绝大多数SCI、核心期刊的要求,降低因格式问题被返修的概率。

进阶版3: 自定义风格保存与一键调用(长期复用)

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

# 封装全套学术风格配置函数
defset_academic_style():
    plt.rcParams['font.family'] = 'Times New Roman'
    plt.rcParams['font.size'] = 8
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['lines.linewidth'] = 0.8
    plt.rcParams['axes.linewidth'] = 0.8
    plt.rcParams['xtick.major.width'] = 0.8
    plt.rcParams['ytick.major.width'] = 0.8
    plt.rcParams['xtick.major.size'] = 3
    plt.rcParams['ytick.major.size'] = 3
    plt.rcParams['xtick.minor.visible'] = False
    plt.rcParams['ytick.minor.visible'] = False
    plt.rcParams['xtick.direction'] = 'in'
    plt.rcParams['ytick.direction'] = 'in'
    plt.rcParams['legend.frameon'] = False
    print("学术绘图风格已全局生效")

# 一键调用风格函数
set_academic_style()

# 测试效果
fig, ax = plt.subplots(figsize=(3.52.5))
x = np.linspace(0550)
y = np.cos(x)
ax.plot(x, y)
ax.set_xlabel('X')
ax.set_ylabel('Cos(X)')
plt.tight_layout()
plt.show()

执行结果如下:

将全套学术风格封装为独立函数,后续绘图只需调用一次,即可完成所有全局配置,省去重复复制代码的麻烦。函数内整合字体、线条、坐标轴、图例等全部核心样式,同时关闭图例边框,进一步贴合学术规范。调用后控制台弹出提示,确认风格生效,方便新手核对。这套风格函数可保存为独立脚本,跨项目、跨章节直接复用,保证整套课程所有绘图作品风格统一,形成标准化的学术绘图模板。

实操任务4:导出矢量PDF、PNG文件,验证文字可编辑性与图像清晰度

文件导出是绘图的最后一环,也是期刊投稿的关键步骤。矢量PDF适合学术投稿,PNG适合word与PPT展示,两类文件都需要保证清晰度、文字可编辑,避开导出报错、模糊、乱码等问题。本节覆盖单文件导出、批量导出、兼容性验证、问题排查全流程,适配各类使用场景。

基础版1:标准格式导出与基础验证

import matplotlib.pyplot as plt
import numpy as np

# 调用全局学术风格
defset_academic_style():
    plt.rcParams['font.family'] = 'Times New Roman'
    plt.rcParams['font.size'] = 8
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['lines.linewidth'] = 0.8
    plt.rcParams['axes.linewidth'] = 0.8
    plt.rcParams['xtick.direction'] = 'in'
    plt.rcParams['ytick.direction'] = 'in'
set_academic_style()

# 创建标准单栏画布,添加可编辑文字
fig, ax = plt.subplots(figsize=(3.52.5))
ax.set_xlabel('Test Variable (Unit)')
ax.set_ylabel('Measurement Value')
ax.set_title('Standard Academic Plot')
ax.plot([1,2,3,4,5], [2,4,6,8,10])
ax.axis([1,5,0,10])

# 导出矢量PDF,期刊投稿首选,文字可编辑
fig.savefig('标准学术图.pdf', dpi=300, bbox_inches='tight', pad_inches=0.05, format='pdf')
# 导出高清PNG,适配公众号、PPT
fig.savefig('标准学术图.png', dpi=300, bbox_inches='tight', pad_inches=0.05, format='png')

plt.show()

执行结果如下:

导出的PDF文件为矢量格式,用专业PDF编辑器打开,所有文字、坐标轴标签均可单独编辑修改,无需重新绘图。文件无限放大无锯齿、无模糊,完全满足期刊300dpi以上的分辨率要求。

进阶版1:多格式批量导出与兼容性优化

import matplotlib.pyplot as plt
import numpy as np
import os

# 全局风格配置
defset_academic_style():
    plt.rcParams['font.family'] = 'Times New Roman'
    plt.rcParams['font.size'] = 8
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['svg.fonttype'] = 'path'
    plt.rcParams['pdf.fonttype'] = 42
set_academic_style()

# 创建测试画布
fig, ax = plt.subplots(figsize=(3.52.5))
x = np.linspace(06100)
y = np.exp(-x/2)
ax.plot(x, y, color='#2E86AB')
ax.set_xlabel('Time (s)')
ax.set_ylabel('Intensity')

# 创建导出文件夹,避免文件杂乱
ifnot os.path.exists('导出文件'):
    os.makedirs('导出文件')

# 批量导出多格式,适配不同需求
# PDF,嵌入字体,保证跨设备显示一致
fig.savefig('导出文件/学术图_印刷级.pdf', dpi=600, bbox_inches='tight', pad_inches=0.05)
# PNG,300dpi,公众号专用
fig.savefig('导出文件/学术图_word.png', dpi=300, bbox_inches='tight', pad_inches=0.05)
# SVG,矢量格式,适配AI后期编辑
fig.savefig('导出文件/学术图_编辑版.svg', bbox_inches='tight', pad_inches=0.05)

plt.close(fig)
print("多格式文件已批量导出至导出文件文件夹")

执行结果如下:

批量导出功能可一次性生成PDF、PNG、SVG三类文件,分别适配印刷投稿、word展示、后期编辑场景。设置pdf.fonttype为'path',实现字体完全嵌入PDF,跨设备打开不会出现字体缺失、乱码问题,解决期刊投稿常见的字体报错问题。自动创建专属导出文件夹,统一管理文件,避免桌面文件杂乱。PDF分辨率设为600dpi,满足顶级期刊印刷要求,PNG保持300dpi,兼顾清晰度与文件体积,适合网络传播。

综合案例:学术期刊标准多子图绘制与导出

import matplotlib.pyplot as plt
import numpy as np
import os

# 一键调用学术风格
defset_academic_style():
    plt.rcParams['font.family'] = 'Times New Roman'
    plt.rcParams['font.size'] = 8
    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['lines.linewidth'] = 0.8
    plt.rcParams['axes.linewidth'] = 0.8
    plt.rcParams['xtick.major.width'] = 0.8
    plt.rcParams['ytick.major.width'] = 0.8
    plt.rcParams['xtick.major.size'] = 3
    plt.rcParams['ytick.major.size'] = 3
    plt.rcParams['xtick.minor.visible'] = False
    plt.rcParams['ytick.minor.visible'] = False
    plt.rcParams['xtick.direction'] = 'in'
    plt.rcParams['ytick.direction'] = 'in'
    plt.rcParams['legend.frameon'] = False
    plt.rcParams['pdf.fonttype'] = 42
set_academic_style()

# 创建期刊标准单栏画布(3.5×5英寸),2行1列子图,共享X轴
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(3.55), sharex='all')

# 生成模拟实验数据,贴合学术场景
x = np.linspace(010100)
y1 = np.sin(x) + 0.5
y2 = np.cos(x) - 0.2

# 绘制子图,设置不同标记点,便于区分数据
axes[0].plot(x, y1, marker='o', markersize=2, label='Group A')
axes[1].plot(x, y2, marker='s', markersize=2, label='Group B')

# 设置子图标题与坐标轴标签
axes[0].set_title('Group A Data Trend')
axes[1].set_title('Group B Data Trend')
axes[1].set_xlabel('Time (min)')
axes[0].set_ylabel('Absorbance')
axes[1].set_ylabel('Absorbance')

# 添加图例,调整布局
axes[0].legend(fontsize=7)
axes[1].legend(fontsize=7)
plt.subplots_adjust(hspace=0.3, left=0.15, right=0.95, top=0.92, bottom=0.1)

# 创建导出文件夹,批量导出多格式
ifnot os.path.exists('综合案例导出'):
    os.makedirs('综合案例导出')
fig.savefig('综合案例导出/期刊标准子图.pdf', dpi=600, bbox_inches='tight', pad_inches=0.05)
fig.savefig('综合案例导出/期刊标准子图.png', dpi=300, bbox_inches='tight', pad_inches=0.05)

plt.show()
print("综合案例绘图与导出完成,文件保存至综合案例导出文件夹")

执行结果如下:

该案例整合本节核心知识点,从全局风格配置到子图布局,再到数据绘制与多格式导出,完全贴合学术期刊绘图规范。运行后生成的子图共享X轴,刻度朝向内侧,字体统一为Times New Roman,线条与标记点尺寸适中,导出的PDF可编辑、清晰度达标,可直接用于期刊投稿。新手可在此基础上修改数据、调整子图数量与尺寸,快速适配自身实验数据展示需求。

- END -

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-16 10:42:44 HTTP/2.0 GET : https://f.mffb.com.cn/a/485788.html
  2. 运行时间 : 0.121336s [ 吞吐率:8.24req/s ] 内存消耗:4,822.23kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=6ab1693381ec95fa9ae66509d72dea90
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001137s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001836s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000831s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000703s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001518s ]
  6. SELECT * FROM `set` [ RunTime:0.000537s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001574s ]
  8. SELECT * FROM `article` WHERE `id` = 485788 LIMIT 1 [ RunTime:0.001433s ]
  9. UPDATE `article` SET `lasttime` = 1776307364 WHERE `id` = 485788 [ RunTime:0.001466s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000620s ]
  11. SELECT * FROM `article` WHERE `id` < 485788 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001157s ]
  12. SELECT * FROM `article` WHERE `id` > 485788 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001132s ]
  13. SELECT * FROM `article` WHERE `id` < 485788 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002995s ]
  14. SELECT * FROM `article` WHERE `id` < 485788 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001080s ]
  15. SELECT * FROM `article` WHERE `id` < 485788 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000824s ]
0.123269s