当前位置:首页>python>用Python做科研级画图——一张“评估图套件”模板

用Python做科研级画图——一张“评估图套件”模板

  • 2026-06-28 02:43:05
用Python做科研级画图——一张“评估图套件”模板

大家好,我是你们的小帅学长。

如果你一路看到这里,应该已经发现,前面我们已经讲了很多评估图(真值 vs 预测、误差分布、分组误差、多模型对比),每一张图都很重要,也都各自回答了一个问题。但真正到了写论文、做汇报、准备答辩的时候,新的问题就出现了:我到底该放哪几张?怎么组织才像一套完整的评估逻辑?难道每次都从头拼?

很多人到这一步就开始“临时凑图”:这一张讲拟合,那一张讲误差,再加一张模型对比,最后图是有了,但逻辑不成体系,读者看完仍然不知道你到底想证明什么。

所以这一篇,我们不再讲某一张单图,而是来做一件更实用、也更“论文级”的事:把评估图做成一套可复用的模板。也就是:一张“评估图套件”模板:可一键出 4 张图

这 4 张图组合起来,基本可以覆盖绝大多数回归、反演、预测任务的论文评估需求。

01.为什么需要“评估图套件”?

因为模型评估不是一个问题,而是一组问题。你至少要回答这四类核心问题:

1)模型整体贴不贴?

也就是:预测值和真值的一致性如何。

用真值 vs 预测图

2)误差偏不偏、散不散?

也就是:误差分布长什么样,有没有系统偏差。

用误差分布图

3)误差“坏”在什么地方?

也就是:某些区间、某些类别是不是明显更差。

用分组误差图

4)多个模型到底谁更强?

也就是:不只比较一个模型,要横向比较多个模型的精度和稳定性。

用多模型对比图

这4个问题加起来,才构成一个完整的评估体系。

所以真正成熟的模型评估,不是“画一张很漂亮的图”,而是用一套图,把模型的优点、缺点、边界讲清楚。

02.这套“4图模板”分别负责什么?

为了以后写论文时不再乱,可以把这套模板固定成下面的结构:

图 1:True vs Predicted

关键词:一致性

核心作用:看模型整体贴不贴、是否围绕 1:1 线

图 2:Error Distribution

关键词:偏差结构

核心作用:看误差是否围绕 0、是否偏态、是否存在系统偏差

图 3:Grouped Error

关键词:局部问题

核心作用:看误差是不是在某些区间/类别明显变坏

图 4:Multi-model Comparison

关键词:横向比较

核心作用:当有多个模型时,看谁更强、谁更稳、谁更均衡

03.为什么这套模板特别适合论文?

因为论文评估最怕两件事:

1)信息不完整

只放一张 True vs Predicted 图,看起来很好,但误差分布呢?是否有系统偏差?某些区间会不会很差?

2)信息太零散

你可能放了很多图,但没有组织逻辑,读者/审稿人看得累。

而“4图套件”的好处是:每一张图各司其职,合在一起又形成完整证据链。

它特别适合:论文结果部分

  模型评估章节

  答辩 PPT

04.最稳的组织顺序

1)先放 True vs Predicted

因为这张图最直观,读者一眼就能建立“整体印象”。

2)再放 Error Distribution

整体贴得不错没错,但误差到底偏不偏、散不散?

3)再放 Grouped Error

整体表现不错,不代表局部都好,问题可能藏在高值区、某类样本里。

4)最后放 Multi-model Comparison

如果你有多个模型,这一张就是总结图:到底哪个模型最好,为什么最好。

这个顺序非常符合阅读逻辑:先整体,后误差;先直观,后拆解;最后总结。

一张图看不完模型的全部,真正专业的评估不是“选一张最漂亮的图”,而是让每张图回答一个清晰的问题,然后把这些答案拼成一套完整证据链。

05.论文级“一键出 4 图”模板代码

下面这段代码会直接帮你生成一套评估图件:

图 1:真值 vs 预测

图 2:误差分布(直方 + KDE + Bias 线)

图 3:分组误差(按真值区间)

图 4:多模型对比(箱线 / 条形 / 点图三联图)

import osimport numpy as npimport pandas as pdimport seaborn as snsimport matplotlib as mplimport matplotlib.pyplot as pltfrom matplotlib import font_manager as fmfrom matplotlib.ticker import MaxNLocator, FormatStrFormatterfrom sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error# =========================================================# 0) 字体设置:英文 Times New Roman + 中文 SimSun# =========================================================win_fonts = r"C:\Windows\Fonts"for p in [    os.path.join(win_fonts, "times.ttf"),    os.path.join(win_fonts, "timesbd.ttf"),    os.path.join(win_fonts, "timesi.ttf"),    os.path.join(win_fonts, "simsun.ttc"),]:    if os.path.exists(p):        try:            fm.fontManager.addfont(p)        except Exception:            passmpl.rcParams["font.family"] = ["Times New Roman""SimSun"]mpl.rcParams["axes.unicode_minus"] = Falsempl.rcParams["text.usetex"] = FalseOUT_DIR = r"D:\py_figs"os.makedirs(OUT_DIR, exist_ok=True)# =========================================================# 1) 构造示例数据# =========================================================np.random.seed(42)y_true = np.random.uniform(280320600)preds = {    "Model A / 模型A": y_true + np.random.normal(01.8600),    "Model B / 模型B": y_true + np.random.normal(02.4600),    "Model C / 模型C": y_true + np.random.normal(01.5600) + 0.35,    "Model D / 模型D": y_true + np.random.normal(02.0600) - 0.25,}# 默认选一个主模型演示单模型评估图main_model_name = "Model C / 模型C"y_pred = preds[main_model_name]errors = y_pred - y_true# =========================================================# 2) 图1:True vs Predicted# =========================================================r2 = r2_score(y_true, y_pred)rmse = np.sqrt(mean_squared_error(y_true, y_pred))mae = mean_absolute_error(y_true, y_pred)bias = np.mean(errors)xy_min = min(y_true.min(), y_pred.min()) - 1.5xy_max = max(y_true.max(), y_pred.max()) + 1.5fig, ax = plt.subplots(figsize=(5.85.2))ax.scatter(y_true, y_pred, s=18, alpha=0.40, color="#4C78A8")ax.plot([xy_min, xy_max], [xy_min, xy_max], linestyle="--", linewidth=1.6, color="red")ax.set_xlim(xy_min, xy_max)ax.set_ylim(xy_min, xy_max)ax.set_xlabel("True Value (K) / 真值", fontsize=12)ax.set_ylabel("Predicted Value (K) / 预测值", fontsize=12)ax.set_title("True vs Predicted / 真值与预测值", fontsize=14)ax.xaxis.set_major_locator(MaxNLocator(nbins=6))ax.yaxis.set_major_locator(MaxNLocator(nbins=6))metrics_text = (    f"R² = {r2:.4f}\n"    f"RMSE = {rmse:.3f}\n"    f"MAE = {mae:.3f}\n"    f"Bias = {bias:.3f}")ax.text(    0.050.95,    metrics_text,    transform=ax.transAxes,    va="top",    ha="left",    fontsize=11,    bbox=dict(boxstyle="round,pad=0.3", facecolor="white", edgecolor="black", alpha=0.9))for spine in ax.spines.values():    spine.set_linewidth(1.2) fig.savefig(os.path.join(OUT_DIR, "suite_01_true_vs_predicted.jpg"),            dpi=300, bbox_inches="tight", pad_inches=0.05)plt.close(fig)# =========================================================# 3) 图2:Error Distribution# =========================================================bias = np.mean(errors)sd = np.std(errors, ddof=1)fig, ax = plt.subplots(figsize=(6.24.8))sns.histplot(errors, bins="fd", stat="density", alpha=0.35, ax=ax)sns.kdeplot(errors, linewidth=2.0, ax=ax)ax.axvline(0, color="black", linestyle="--", linewidth=1.4)ax.axvline(bias, color="red", linestyle="--", linewidth=1.6)ax.set_title("Error Distribution / 误差分布", fontsize=14)ax.set_xlabel("Error = Predicted - True (K) / 误差", fontsize=12)ax.set_ylabel("Density / 密度", fontsize=12)ax.xaxis.set_major_locator(MaxNLocator(nbins=6))ax.yaxis.set_major_locator(MaxNLocator(nbins=6))metrics_text = (    f"Bias = {bias:.3f}\n"    f"SD = {sd:.3f}\n"    f"RMSE = {rmse:.3f}")ax.text(    0.970.95,    metrics_text,    transform=ax.transAxes,    va="top",    ha="right",    fontsize=11,    bbox=dict(boxstyle="round,pad=0.3", facecolor="white", edgecolor="black", alpha=0.9))for spine in ax.spines.values():    spine.set_linewidth(1.2)fig.savefig(os.path.join(OUT_DIR, "suite_02_error_distribution.jpg"),            dpi=300, bbox_inches="tight", pad_inches=0.05)plt.close(fig)# =========================================================# 4) 图3:Grouped Error(按真值区间)# =========================================================bins = [280290300310320]labels = ["280–290""290–300""300–310""310–320"]df = pd.DataFrame({    "True": y_true,    "Pred": y_pred,    "Error": errors})df["True_bin"] = pd.cut(df["True"], bins=bins, labels=labels, include_lowest=True)grouped_errors = [df.loc[df["True_bin"] == lab, "Error"].values for lab in labels]fig, ax = plt.subplots(figsize=(7.04.6))ax.boxplot(    grouped_errors,    patch_artist=True,    widths=0.6,    showfliers=True,    medianprops=dict(color="black", linewidth=1.5),    whiskerprops=dict(color="black", linewidth=1.2),    capprops=dict(color="black", linewidth=1.2),    boxprops=dict(facecolor="white", edgecolor="black", linewidth=1.2),    flierprops=dict(marker='o', markerfacecolor='white', markeredgecolor='black',                    markersize=4, linestyle='none'))ax.axhline(0, color="red", linestyle="--", linewidth=1.3)ax.set_xticks(range(1len(labels) + 1))ax.set_xticklabels(labels, fontsize=11)ax.set_title("Grouped Error by True Bins / 按真值区间分组的误差", fontsize=14)ax.set_xlabel("True Value Bin (K) / 真值区间", fontsize=12)ax.set_ylabel("Error (K) / 误差", fontsize=12)for spine in ax.spines.values():    spine.set_linewidth(1.2)fig.savefig(os.path.join(OUT_DIR, "suite_03_grouped_error.jpg"),            dpi=300, bbox_inches="tight", pad_inches=0.05)plt.close(fig)# =========================================================# 5) 图4:Multi-model Comparison(三联图)# =========================================================model_names = list(preds.keys())errors_all = []rmse_list = []r2_list = []for name in model_names:    err = preds[name] - y_true    errors_all.append(err)    rmse_list.append(np.sqrt(mean_squared_error(y_true, preds[name])))    r2_list.append(r2_score(y_true, preds[name]))fig, axes = plt.subplots(13, figsize=(144.8))# ---- (1) 箱线图:误差分布 ----axes[0].boxplot(    errors_all,    patch_artist=True,    widths=0.55,    medianprops=dict(color="black", linewidth=1.5),    whiskerprops=dict(color="black", linewidth=1.2),    capprops=dict(color="black", linewidth=1.2),    boxprops=dict(facecolor="white", edgecolor="black", linewidth=1.2),    flierprops=dict(marker='o', markerfacecolor='white', markeredgecolor='black',                    markersize=4, linestyle='none'))axes[0].axhline(0, color="red", linestyle="--", linewidth=1.2)axes[0].set_xticks(range(1len(model_names) + 1))axes[0].set_xticklabels(["A""B""C""D"])axes[0].set_title("Error Distribution / 误差分布", fontsize=13)axes[0].set_ylabel("Error (K) / 误差", fontsize=11)# ---- (2) 条形图:RMSE ----order_rmse = np.argsort(rmse_list)vals_rmse = [rmse_list[i] for i in order_rmse]y_rmse = np.arange(len(vals_rmse))axes[1].barh(y_rmse, vals_rmse)axes[1].set_yticks(y_rmse)axes[1].set_yticklabels(["A""B""C""D"])axes[1].invert_yaxis()axes[1].set_title("RMSE Ranking / RMSE 排序", fontsize=13)axes[1].set_xlabel("RMSE (K)", fontsize=11)for yi, v in zip(y_rmse, vals_rmse):    axes[1].text(v + 0.03, yi, f"{v:.2f}", va="center", fontsize=10)# ---- (3) 点图:R² ----order_r2 = np.argsort(r2_list)[::-1]vals_r2 = [r2_list[i] for i in order_r2]y_r2 = np.arange(len(vals_r2))axes[2].scatter(vals_r2, y_r2, s=70)for yi, v in zip(y_r2, vals_r2):    axes[2].plot([0, v], [yi, yi], linewidth=1.0)    axes[2].text(v + 0.002, yi, f"{v:.3f}", va="center", fontsize=10)axes[2].set_yticks(y_r2)axes[2].set_yticklabels(["A""B""C""D"])axes[2].invert_yaxis()axes[2].set_xlim(left=0)axes[2].set_title("R² Ranking / 排序", fontsize=13)axes[2].set_xlabel("R²", fontsize=11)for ax in axes:    for spine in ax.spines.values():        spine.set_linewidth(1.2)fig.suptitle("Multi-model Comparison / 多模型对比", fontsize=15, y=1.02)fig.savefig(os.path.join(OUT_DIR, "suite_04_multi_model_comparison.jpg"),            dpi=300, bbox_inches="tight", pad_inches=0.05)plt.close(fig)print("Saved 4 figures to:", OUT_DIR)

这套模板的价值,不在于“自动生成 4 张图”本身,而在于它帮你固定了一套评估逻辑:先用真值 vs 预测图看整体一致性,再用误差分布看系统偏差与形状,再用分组误差看局部问题,最后用多模型对比图做总结。

一张评估图能回答一个问题,但一套评估图才能证明一个模型——当真值 vs 预测、误差分布、分组误差、多模型对比被固定成模板之后,你的模型评估就不再是临时拼图,而是一套可以持续复用的证据系统。

下一篇我们会进入另一个非常实用、但经常让人纠结的技术点:《子图布局(tight / constrained 怎么选)》。当你开始把多张图组合成一整版论文图时,布局就不再只是“摆放”,而是决定一张图到底显不显专业的关键。

——期待你的关注—— 

往期内容:

用Python做科研级画图——真值vs预测(1:1线 + 指标框)

用Python做科研级画图——多模型对比(箱线/条形/点图组合)

用Python做科研级画图——相关矩阵热力图

用Python做科研级画图——残差图

用Python做科研级画图——回归拟合线

用Python做科研级画图——雨云图

用Python做科研级画图——小提琴图

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 08:13:48 HTTP/2.0 GET : https://f.mffb.com.cn/a/499969.html
  2. 运行时间 : 0.453791s [ 吞吐率:2.20req/s ] 内存消耗:4,990.85kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=ac7bcf89b14950cc749a276388f9d202
  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.000478s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000567s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000287s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.009936s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000576s ]
  6. SELECT * FROM `set` [ RunTime:0.000269s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000611s ]
  8. SELECT * FROM `article` WHERE `id` = 499969 LIMIT 1 [ RunTime:0.053575s ]
  9. UPDATE `article` SET `lasttime` = 1783037628 WHERE `id` = 499969 [ RunTime:0.014475s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.043372s ]
  11. SELECT * FROM `article` WHERE `id` < 499969 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.015013s ]
  12. SELECT * FROM `article` WHERE `id` > 499969 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.018509s ]
  13. SELECT * FROM `article` WHERE `id` < 499969 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.073563s ]
  14. SELECT * FROM `article` WHERE `id` < 499969 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.058469s ]
  15. SELECT * FROM `article` WHERE `id` < 499969 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.025109s ]
0.459032s