当前位置:首页>python>期刊图复现 | Python 画 SHAP 环形蜂巢图 + 玫瑰花图

期刊图复现 | Python 画 SHAP 环形蜂巢图 + 玫瑰花图

  • 2026-02-05 13:34:23
期刊图复现 | Python 画 SHAP 环形蜂巢图 + 玫瑰花图

很多时候做完模型训练后,会遇到两个“解释性”层面的需求:

  1. 特征到底谁更重要?(全局重要性排序)
  2. 重要性背后到底发生了什么?(同一特征在不同样本上的贡献分布、正负方向、以及与特征取值高低的关系)

传统条形图往往只能回答第 1 个问题;而 SHAP summary/beeswarm 虽然能回答第 2 个问题,但在做“图形化呈现”时不够紧凑。本文基于这个思路,把这两个问题合并到一张图里:

复现期刊及图片

复现结果

  • 内圈玫瑰花图(环形柱):用 mean(|SHAP|) 表达全局重要性,配合数值标注,直观看到“谁更重要”。
  • 外圈环形蜂巢图(极坐标 beeswarm):把每个样本的 SHAP 值映射到半径方向,再在角度方向做“蜂群抖动”防重叠;颜色用原始特征值(Low→High)映射,直观看到“高值/低值分别倾向推动正类还是负类”。

这类“内圈总结 + 外圈分布”的组合图特别适合论文插图或汇报:读者第一眼看重要性,第二眼看机制,而且画面非常紧凑。

为了让读者快速“读懂图”,建议你在文章/图注里给出一行读图规则:“看内圈花瓣高度=重要性;看外圈点在虚线圆内外=贡献正负;看点的颜色=特征取值高低(Low→High)。”

# 01_全局配置与参数from __future__ import annotationsfrom pathlib import Pathimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport shapimport xgboost as xgbplt.rcParams["font.family"] = "Times New Roman"plt.rcParams["axes.unicode_minus"] = Falseplt.rcParams["figure.dpi"] = 300plt.rcParams["savefig.bbox"] = "tight"plt.rcParams["font.size"] = 12RANDOM_SEED = 42CSV_FILE = "分类样本.csv"TARGET_COL = "label"OUTPUT_DIR = Path("images")  # 输出目录(自动创建)CLASS_INDEX_FOR_SHAP = 0# 多分类时选哪一类的 SHAPTOP_N = None# 只画前 N 个特征(None=全部)COLOR_SCHEMES = [    ("RdBu_r""RdBu_r"),    ("Viridis""viridis"),    ("YlGnBu""YlGnBu"),]

1) 数据与模型:把分类问题“标准化”到可解释的输入输出

想画 SHAP 图,第一步不是“画”,而是把输入和输出变得稳定且可复现:特征矩阵必须是纯数值(分类变量要 one-hot),标签必须是可控的整数编码,模型要固定随机种子。这样做的好处是:

  • 你后续计算的 SHAP 值维度稳定((n_samples, n_features)),不会因为某一列是字符串而报错。
  • 同一份数据重复跑出来的结果一致(对比实验、换配色、换图形参数才有意义)。
  • 多分类场景下,你能明确“我现在解释的是哪一类(class)”,避免把不同类别的贡献混在一张图里产生误读。

这篇文章以 XGBoost 分类器为例:它在科研场景里足够常见、效果稳定,而且 shap.TreeExplainer 对树模型速度非常快,适合做可视化。

另外两个常见“坑”也建议提前处理:(1)缺失值:XGBoost 可以处理缺失,但你的 one-hot 后矩阵如果混入 object 类型或 NaN 传播到字符串列,后面会很难排查;稳妥做法是先把数据清洗到“纯数值”。(2)列名与可读性:如果后续要发表/展示,建议把列名提前改成简洁但不含歧义的英文缩写;本文脚本也支持把长列名映射为 F1..Fn(便于排版),同时导出映射表。

defto_numeric_matrix(X: pd.DataFrame) -> pd.DataFrame:    non_numeric = [c for c in X.columns ifnot pd.api.types.is_numeric_dtype(X[c])]return pd.get_dummies(X, columns=non_numeric, drop_first=Falseif non_numeric else Xdata = pd.read_csv(CSV_FILE)X = to_numeric_matrix(data.drop(columns=[TARGET_COL]))# 标签编码:把任意字符串/整数标签统一成 0..K-1,并保留映射关系y_raw = data[TARGET_COL]y, y_classes = pd.factorize(y_raw, sort=True)print("类别映射:", dict(enumerate([str(v) for v in y_classes])))n_classes = len(y_classes)objective = "binary:logistic"if n_classes == 2else"multi:softprob"eval_metric = "logloss"if n_classes == 2else"mlogloss"model = xgb.XGBClassifier(    n_estimators=300,    max_depth=4,    learning_rate=0.05,    subsample=0.8,    colsample_bytree=0.8,    random_state=RANDOM_SEED,    n_jobs=-1,    objective=objective,    eval_metric=eval_metric,    num_class=(n_classes if n_classes > 2elseNone),)model.fit(X, y)

2) 计算 SHAP:把“黑箱预测”拆成逐特征的加性贡献

在树模型里,SHAP 的核心输出是:对每个样本、每个特征,给一个实数贡献值(可正可负)。在分类任务中要注意两点细节:

  1. 二分类 vs 多分类的返回格式差异在一些版本组合下,explainer.shap_values(X) 可能返回 list(长度=类别数),也可能直接返回 array。稳妥做法是:检测 list 就按 CLASS_INDEX_FOR_SHAP 取某一类再画。

  2. 把“重要性”定义成可排序的标量为了做内圈“玫瑰花柱”,需要每个特征一个标量。最常用也最稳健的是:mean(|SHAP|)。它忽略正负方向,回答“这个特征对模型输出的平均影响强度有多大”。

做完这一步,你会得到两套信息:

  • mean_abs:长度为 n_features 的一维数组,给内圈排序/花瓣高度用。
  • shap_values:形状 (n_samples, n_features) 的二维数组,给外圈蜂巢点阵用(看到分布、方向、异质性)。

解释上可以把它理解成一种“可加性分解”:模型对某个样本的输出,是“基线值 + 各特征贡献”的叠加。mean(|SHAP|) 只是在全体样本上把贡献的强度取了平均,因此特别适合做“全局重要性”;而外圈保留每个样本点,适合回答“在不同样本上这个特征到底怎么起作用”。

explainer = shap.TreeExplainer(model)shap_values = explainer.shap_values(X)# 兼容二/多分类:如果是 list,则选定一个类别来画if isinstance(shap_values, list):    shap_values = shap_values[CLASS_INDEX_FOR_SHAP]shap_values = np.asarray(shap_values, dtype=float)  # (n_samples, n_features)mean_abs = np.mean(np.abs(shap_values), axis=0)order = np.argsort(mean_abs)[::-1]  # 重要性从高到低if TOP_N isnotNone:    order = order[: int(TOP_N)]X_sel = X.iloc[:, order].to_numpy(dtype=float, copy=False)shap_sel = shap_values[:, order]mean_abs_sel = mean_abs[order]feature_names = [str(c) for c in X.columns]labels_sel = [feature_names[i] for i in order]

3) 玫瑰花图(内圈):用极坐标环形柱表达全局重要性

“玫瑰花图”本质是极坐标柱状图:每个特征占一个角度扇区(theta),柱子的高度表示该特征的重要性(这里用 mean(|SHAP|))。为了画得更“出版级”,这里有几个关键处理:

  • 高度缩放:重要性往往差异很大,直接用原值画,弱特征会几乎看不见。可以先把 mean_abs 线性归一到 [0,1],再映射到 [MIN_H, MAX_H] 的柱高范围。
  • 最短花瓣高度MIN_H 不是“美化”,它是为了避免某些特征在图上完全消失,从而导致读者误以为“没有该特征”。
  • 数值标注:公众号读者通常更希望“看见数值”,而不只是一堆颜色。每个花瓣顶部标注 mean(|SHAP|),图的解释成本会显著下降。

如果你希望“花瓣颜色也表达信息”,常见做法是用同一 colormap 对花瓣按重要性上色(越重要越深),但本文脚本把花瓣颜色做成均匀渐变,更多是为了增强层次与美观;真正的“信息承载”交给外圈颜色(特征值),避免信息冲突。

import matplotlib as mplm = len(order)theta = np.linspace(0.02.0 * np.pi, m, endpoint=False)width = 2.0 * np.pi / float(m) * 0.92center_hole_r = 0.18# 中心空洞半径bar_max_h = 1.20# 花瓣最大高度min_h = 0.30# 最短花瓣(避免“消失”)min_mean = float(np.nanmin(mean_abs_sel))max_mean = float(np.nanmax(mean_abs_sel))if max_mean <= min_mean:    heights = np.full_like(mean_abs_sel, min_h, dtype=float)else:    scaled = (mean_abs_sel - min_mean) / (max_mean - min_mean)    heights = min_h + np.clip(scaled, 0.01.0) * (bar_max_h - min_h)fig = plt.figure(figsize=(88))ax = plt.subplot(111, projection="polar")ax.set_theta_direction(-1)         # 顺时针ax.set_theta_offset(np.pi / 2.0)   # 0 度在正上方ring_colors = mpl.colormaps.get_cmap("viridis")(np.linspace(0.050.95, m))ax.bar(theta, heights, width=width, bottom=center_hole_r, color=ring_colors,       edgecolor="white", linewidth=1.2, alpha=0.98, zorder=3)for th, h, v in zip(theta, heights, mean_abs_sel):    ax.text(th, center_hole_r + h + 0.10f"{float(v):.3f}",            ha="center", va="center", fontsize=8.5, color="#222222", zorder=6)

4) 环形蜂巢图(外圈):把 SHAP 分布“搬到”极坐标上

外圈的目标不是再做一次“排序”,而是把每个特征的样本级贡献分布画出来:同一特征在不同样本上可能正负并存、幅度差异很大,这正是解释模型机制最关键的信息。

核心思想可以拆成三个映射:

  1. 半径映射(贡献→距离)设定一个外圈基准半径 r0,再把 SHAP 值按最大绝对值归一,映射到 [r0 - scale, r0 + scale]

    • SHAP > 0 的样本点落在 r0 外侧,表示“推动模型输出更偏向该类”。
    • SHAP < 0 的样本点落在 r0 内侧,表示“抑制该类”。
  2. 角度抖动(beeswarm→蜂巢质感)同一扇区里点很多会重叠,所以在角度方向做小幅抖动:先按 SHAP 值分箱,再按 0,+1,-1,+2,-2... 给出偏移序号,最终转成 dtheta。点阵密集时会形成“蜂巢/蜂群”视觉效果。

  3. 颜色映射(特征值→Low/High)对每个特征,把原始特征值做分位数截断后归一到 [0,1],再上色。这样能有效避免极端值把颜色拉爆,读者看到的是“主要样本的趋势”,而不是几个异常点在抢戏。

读图时你可以这样“快速判断关系”:

  • 如果某特征的高值(偏黄/偏亮)主要落在 r0 外侧,通常意味着“特征值越高越推动该类”;
  • 如果高值主要落在 r0 内侧,则倾向“高值抑制该类”;
  • 如果颜色在内外两侧都很混杂,说明该特征与输出的关系可能非单调,或者存在与其他特征的交互(这时可以进一步看 interaction SHAP 或分组分析)。
defscale_to_unit_interval(values: np.ndarray, q_low: float = 5.0, q_high: float = 95.0) -> np.ndarray:    values = values.astype(float)    lo, hi = np.nanpercentile(values, [q_low, q_high])ifnot np.isfinite(lo) ornot np.isfinite(hi) or hi <= lo:return np.full_like(values, 0.5, dtype=float)return (np.clip(values, lo, hi) - lo) / (hi - lo)defbeeswarm_offsets_1d(values: np.ndarray, nbins: int = 45, spacing: float = 1.0) -> np.ndarray:    values = np.asarray(values, dtype=float)    offsets = np.zeros(values.shape[0], dtype=float)    finite = np.isfinite(values)ifnot np.any(finite) or np.allclose(values[finite].min(), values[finite].max()):return offsets    v = values[finite]    edges = np.linspace(v.min(), v.max(), nbins + 1)    bin_id = np.clip(np.digitize(v, edges, right=False) - 10, nbins - 1)    finite_idx = np.flatnonzero(finite)for b in range(nbins):        idx = finite_idx[np.flatnonzero(bin_id == b)]for k, ii in enumerate(idx):            step = (k + 1) // 2            sign = 1.0if (k % 2 == 1else-1.0            offsets[ii] = 0.0if k == 0else sign * step * spacingreturn offsets# 外圈几何参数(可作为“蜂巢密度/外扩幅度”的主要调参入口)r0 = center_hole_r + bar_max_h + 1.00# 外圈基准半径(虚线圆位置)swarm_scale = 0.80# SHAP 径向展开幅度theta_spread = width * 0.32# 抖动角度幅度(越大越“蜂巢”但越拥挤)abs_shap_max = float(np.nanmax(np.abs(shap_sel))) or1.0value_cmap = mpl.colormaps.get_cmap("viridis")circle_theta = np.linspace(0.02.0 * np.pi, 720)ax.plot(circle_theta, np.full_like(circle_theta, r0), linestyle="--", color="#777777", linewidth=1.0, zorder=2)for i in range(m):    shap_i = shap_sel[:, i]    feat_i = X_sel[:, i]    colors = value_cmap(scale_to_unit_interval(feat_i))    offsets = beeswarm_offsets_1d(shap_i)    max_off = float(np.max(np.abs(offsets))) if offsets.size else0.0    dtheta = np.zeros_like(offsets) if max_off <= 0else (offsets / max_off) * theta_spread    r = r0 + (shap_i / abs_shap_max) * swarm_scale    th = theta[i] + dtheta    ax.scatter(th, r, s=7.5, c=colors, alpha=0.88, linewidths=0.0, zorder=5, rasterized=True)

5) 批量配色导出 + 总结:一张图同时回答“谁重要”和“为什么重要”

到这里,内圈负责“全局重要性”,外圈负责“局部贡献分布 + 特征值梯度”,两者叠在同一极坐标系上,就能同时回答:

  • 谁更重要:看内圈花瓣高度和标注数值(mean(|SHAP|))。
  • 重要性来自哪里:看外圈点云在 r0 内外的分布(正负贡献),以及颜色(低值/高值)与正负贡献的对应关系。

实用建议(非常适合写在图注或方法部分):

  • 想突出“少数关键特征”,把 TOP_N 设置成 10~20,图会更干净。
  • 多分类时一定明确 CLASS_INDEX_FOR_SHAP;建议在导出图名里也写上类别名,避免后续混淆。
  • 蜂巢更“松”还是更“密”,优先调 r0(外圈离内圈距离)和 theta_spread(角度抖动幅度)。
  • 如果某些特征的颜色几乎都在一端,优先检查该特征是否离散/常数列;必要时对离散特征单独处理(比如更换 colormap 或只显示分组颜色)。

现在绘图代码都不支持免费获取了,20/篇文章。同时欢迎加入小编科研绘图VIP群,198/年,保证每年更新40篇以上的科研绘图相关文章,涵盖机器学习模型(回归和分类)的shap分析、还有各种如皮尔逊分析等相关的图,以及期刊复现图,源代码直接复制或者打开就能绘图。同时进群还赠送微信推文中所有绘图代码以及科研绘图SHAP分析软件和依赖图分析软件,且免费更新使用。后期还会免费赠送一些科研绘图小软件,还有拼图软件(开发中)VX:GISyanjiushengya!!!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 17:05:18 HTTP/2.0 GET : https://f.mffb.com.cn/a/473564.html
  2. 运行时间 : 0.387955s [ 吞吐率:2.58req/s ] 内存消耗:4,620.08kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=4827ec841b75d3fda2e8a8fb04ec7a48
  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.000937s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001551s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001433s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.005451s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001401s ]
  6. SELECT * FROM `set` [ RunTime:0.007348s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001521s ]
  8. SELECT * FROM `article` WHERE `id` = 473564 LIMIT 1 [ RunTime:0.018345s ]
  9. UPDATE `article` SET `lasttime` = 1770455119 WHERE `id` = 473564 [ RunTime:0.013824s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.001569s ]
  11. SELECT * FROM `article` WHERE `id` < 473564 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.006592s ]
  12. SELECT * FROM `article` WHERE `id` > 473564 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.004257s ]
  13. SELECT * FROM `article` WHERE `id` < 473564 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.016653s ]
  14. SELECT * FROM `article` WHERE `id` < 473564 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.095551s ]
  15. SELECT * FROM `article` WHERE `id` < 473564 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.078085s ]
0.390979s