当前位置:首页>java>告别 DAG 绘图兼容问题!纯 R 原生代码绘制有向无环图,一步到位

告别 DAG 绘图兼容问题!纯 R 原生代码绘制有向无环图,一步到位

  • 2026-02-05 00:45:03
告别 DAG 绘图兼容问题!纯 R 原生代码绘制有向无环图,一步到位
在医学科研和数据分析中,有向无环图(DAG)是梳理变量间因果关系、识别混杂因素的重要工具,而dagitty+ggdag则是 R 语言中绘制 DAG 的常用组合。但近期很多小伙伴都遇到了相同的问题:新版ggplot2与ggdag存在兼容性冲突,运行代码时频繁抛出@scales must be S3错误,反复调试也无法解决。
其实解决思路很简单 ——彻底脱离ggdag依赖,用dagitty定义 DAG 结构,搭配ggplot2原生语法绘图,既避开版本兼容坑,又能实现高度自定义,绘制出符合科研论文和汇报要求的专业 DAG 图。今天就以血液透析等医学研究中经典的因果模型(混杂因素 W→暴露 A→结局 Y,W 同时直接影响 Y)为例,手把手教大家用纯原生代码绘制 DAG,全程可复制、零报错!

核心优势

彻底解决兼容问题

:舍弃封装包ggdag,仅用dagitty(定义因果逻辑)和ggplot2(可视化)两个核心包,适配所有新版 R 和包版本;

高度自定义

:节点位置、颜色、大小,箭头样式、粗细均可自由调整,满足不同科研场景的排版需求;

代码可扩展性强

:新增变量、新增因果路径只需简单修改数据框,无需重构代码,适配复杂 DAG 模型;

结果可直接复用

:绘制的图形可直接导出为高清图片,用于论文、课题汇报和数据分析报告。

完整可运行代码

直接复制以下代码到 RStudio 或 R 终端,一键运行即可生成 DAG 图,无需额外配置!
# 加载核心包,仅需两个,无冗余依赖library(dagitty)   # 定义DAG因果结构library(ggplot2)   # 原生可视化,无兼容问题# 步骤1:定义DAG因果逻辑结构# 可直接替换W/A/Y为实际研究变量(如age/干预/疗效)dag <- dagitty(  "dag {    W -> A  # 混杂因素W影响暴露因素A    W -> Y  # 混杂因素W直接影响结局Y    A -> Y  # 暴露因素A影响结局Y  }")# 标记暴露因素和结局变量(仅逻辑标注,不影响绘图)exposures(dag) <- c("A")outcomes(dag) <- c("Y")# 步骤2:整理节点和边的可视化数据# 2.1 定义节点坐标(x/y控制位置,可自由修改)nodes <- data.frame(  name = c("W""A""Y"),  # 变量名,与DAG定义完全一致  x = c(123),           # 水平位置,数值越大越靠右  y = c(212)            # 垂直位置,数值越大越靠上)# 2.2 定义边的因果关系(谁指向谁)edges <- data.frame(  from = c("W""W""A"),  # 边的起点  to = c("A""Y""Y")     # 边的终点)# 2.3 合并坐标与边关系(关键步骤,让R识别箭头绘制位置)edges <- merge(edges, nodes, by.x = "from", by.y = "name", suffixes = c("""_from"))edges <- merge(edges, nodes, by.x = "to", by.y = "name", suffixes = c("_from""_to"))# 步骤3:ggplot2原生绘制DAG图,样式可自由调整ggplot() +  # 绘制有向箭头(边)  geom_segment(    data = edges,    aes(x = x_from, y = y_from, xend = x_to, yend = y_to),    arrow = arrow(length = unit(0.2"inches"), type = "closed"), # 实心箭头,长度0.2英寸    color = "black", linewidth = 0.8  # 箭头颜色、粗细  ) +  # 绘制节点(圆形,带边框)  geom_point(    data = nodes,    aes(x = x, y = y),    size = 15, shape = 21,  # 节点大小、形状(21为带边框圆形)    # 自定义节点填充色,可根据需求替换配色    fill = c("W" = "#A23B72""A" = "#2E86AB""Y" = "#F18F01")[nodes$name],    color = "black"  # 节点边框颜色  ) +  # 添加节点标签(变量名,白色加粗)  geom_text(    data = nodes,    aes(x = x, y = y, label = name),    color = "white", fontface = "bold", size = 5  ) +  # 调整主题,隐藏坐标轴、网格,让图形更简洁  theme_minimal() +  theme(    axis.text = element_blank(),  # 隐藏坐标轴刻度    axis.title = element_blank(),  # 隐藏坐标轴标题    panel.grid = element_blank(),  # 隐藏网格线    plot.background = element_blank()  # 隐藏背景  ) +  # 固定坐标比例,避免圆形节点变形、箭头倾斜  coord_fixed(ratio = 1) +  # 调整绘图范围,避免箭头超出画布  xlim(0.53.5) +  ylim(0.52.5)# 可选:导出高清图片(保存到工作目录,分辨率300dpi,满足论文要求)ggsave("DAG因果图.png", width = 6, height = 4, dpi = 300)

代码关键模块详细解读

很多小伙伴不仅想 “一键运行”,更想根据自己的研究需求修改代码,下面对核心模块逐一拆解,让大家知其然更知其所以然。

模块 1:定义 DAG 因果结构

这是 DAG 绘制的逻辑核心,用dagitty专属语法描述变量间的因果关系,格式为变量1 -> 变量2(表示变量 1 直接影响变量 2)。
dag <- dagitty(  "dag {    W -> A    W -> Y    A -> Y  }")

替换规则:直接把W/A/Y换成自己研究的变量即可,比如血液透析研究中,可设W=透析龄、A=导管护理方式、Y=导管相关感染率;

新增变量 / 路径:若需增加混杂因素Z,只需添加Z -> A和Z -> Y即可,逻辑清晰易操作;

exposures()

和outcomes():仅用于标记研究的暴露因素和结局变量,方便后续因果分析,不影响图形绘制,可根据需求省略。

模块 2:整理可视化数据

这一步是脱离 ggdag 的关键,手动给变量分配坐标、匹配边的关系,让ggplot2能识别 “在哪里画节点、在哪里画箭头”。

节点坐标

:nodes数据框中,x控制水平位置,y控制垂直位置,数值越大分别越靠右、越靠上,调整数值即可改变节点位置,避免图形重叠;

边的关系

:edges数据框中,from是箭头起点,to是箭头终点,必须与nodes中的name完全一致;

坐标合并

:两次merge操作把 “逻辑关系(W→A)” 转化为 “坐标关系(x=1,y=2 → x=2,y=1)”,这是 ggplot2 绘制箭头的基础,无需修改代码,只需保证变量名一致即可。

模块 3:ggplot2 原生绘图

这部分是样式自定义核心,所有绘图元素均可自由调整,核心层为「箭头→节点→标签」,层层叠加不冲突,关键参数修改指南:

箭头样式

:修改arrow(length = unit(0.2, "inches"))中的0.2可调整箭头长度,type = "open"可改为空心箭头;

节点样式

:size = 15调整节点大小,shape可替换为其他形状(如 22 为正方形、23 为菱形),fill后的色值可替换为任意配色(推荐使用 RGB 色值或十六进制色值);

标签样式

:size = 5调整标签字号,fontface = "italic"可改为斜体,color可替换为其他字体颜色;

图形尺寸

:导出图片时,修改ggsave中的width = 6, height = 4可调整图片宽高,单位为英寸,dpi = 600可提高分辨率至 600dpi。

常见修改场景:适配你的研究

掌握核心修改规则后,可快速适配不同研究场景的 DAG 模型,以下为两种常见场景的修改示例,直接替换对应代码即可。

场景 1:新增一个混杂因素 Z

在原有模型基础上,新增混杂因素 Z,Z 同时影响 A 和 Y,只需修改模块 2的nodes和edges:
# 修改后的节点坐标nodes <- data.frame(  name = c("W""Z""A""Y"),  x = c(1123),  y = c(20.512))# 修改后的边关系edges <- data.frame(  from = c("W""W""Z""Z""A"),  to = c("A""Y""A""Y""Y"))

场景 2:替换为实际医学研究变量

以血液透析研究为例,设W=透析龄、A=中心静脉导管护理方式、Y=导管相关血流感染率,只需全局替换变量名,并调整节点标签为中文:
library(dagitty)   library(ggplot2)   # 解决中文标签显示乱码问题theme_set(theme_bw(base_family = "SimHei"))  # Windows系统;Mac替换为"PingFang SC"# 步骤1:定义DAG(修正内部注释,避免语法错误)dag <- dagitty(  "dag {    W -> A      W -> Y      W -> Z    A -> Y    Z -> Y  }")exposures(dag) <- c("A")outcomes(dag) <- c("Y")# 步骤2:整理节点和边的可视化数据nodes <- data.frame(  name = c("W""Z""A""Y"),            label = c("透析龄""患者依从性""导管护理方式""导管相关感染率"),    x = c(1223),             y = c(2312)          )# 边的关系edges <- data.frame(  from = c("W""W""W",  "Z""A"),    to = c("A""Y""Z",  "Y""Y")     )# 合并坐标与边关系edges <- merge(edges, nodes, by.x = "from", by.y = "name", suffixes = c("""_from"))edges <- merge(edges, nodes, by.x = "to", by.y = "name", suffixes = c("_from""_to"))# 核心:自定义函数调整箭头位置(缩短线段,避免箭头贴节点)adjust_segment <- function(edges_df, shorten_ratio = 0.15) {  # 计算线段的x/y差值(向量)  edges_df$dx <- edges_df$x_to - edges_df$x_from  edges_df$dy <- edges_df$y_to - edges_df$y_from  # 缩短线段:终点向起点移动shorten_ratio比例,箭头落在缩短后的终点  edges_df$xend_adj <- edges_df$x_from + edges_df$dx * (1 - shorten_ratio)  edges_df$yend_adj <- edges_df$y_from + edges_df$dy * (1 - shorten_ratio)  return(edges_df)}# 调整所有边的位置(缩短15%,箭头远离节点)edges_adj <- adjust_segment(edges, shorten_ratio = 0.15)# 可选:单独调整Z->Y的箭头位置(缩短50%,箭头在中点)edges_adj_z2y <- adjust_segment(subset(edges, from == "Z" & to == "Y"), shorten_ratio = 0.2)# 步骤3:绘图(使用调整后的线段位置)ggplot() +  # 绘制普通箭头(除Z->Y外),箭头靠近终点但不贴节点  geom_segment(    data = subset(edges_adj, !(from == "Z" & to == "Y")),    aes(x = x_from, y = y_from, xend = xend_adj, yend = yend_adj),  # 用调整后的终点    arrow = arrow(length = unit(0.2"inches"), type = "closed"),    color = "black", linewidth = 0.8  ) +  # 单独绘制Z->Y的箭头(中点位置,可按需保留/删除)  geom_segment(    data = edges_adj_z2y,    aes(x = x_from, y = y_from, xend = xend_adj, yend = yend_adj),    arrow = arrow(length = unit(0.2"inches"), type = "closed"),    color = "black", linewidth = 1  # 加粗突出  ) +  # 绘制节点  geom_point(    data = nodes,    aes(x = x, y = y),    size = 15, shape = 21,    fill = c("W" = "#A23B72""Z" = "#6A994E""A" = "#2E86AB""Y" = "#F18F01")[nodes$name],    color = "black"  ) +  # 添加中文标签(保留你设置的位置)  geom_text(    data = nodes,    aes(x = x, y = y, label = label),    color = "black", fontface = "bold", size = 4,    angle = 0,      hjust = c(1.7,0.5,0.5,-0.3),    vjust = c(0.5,-3.7,3.9,0.5)  ) +  # 主题调整  theme_minimal() +  theme(    axis.text = element_blank(),    axis.title = element_blank(),    panel.grid = element_blank(),    plot.background = element_blank(),    text = element_text(family = "SimHei")  ) +  coord_fixed(ratio = 1) +  xlim(05) +  ylim(04)
提示:中文标签显示乱码时,只需在绘图前添加一行代码

theme_set(theme_bw(base_family = "SimHei"))(设置黑体),即可正常显示中文。

避坑指南:这些错误别犯

变量名不一致

:nodes、edges、dag中的变量名必须完全一致(包括大小写、中英文),否则会出现 “坐标匹配失败”;

忘记固定坐标比例

:省略coord_fixed(ratio = 1)会导致圆形节点变椭圆、箭头倾斜,破坏 DAG 视觉效果,必须保留;

绘图范围过小

:节点坐标超出xlim/ylim范围会导致节点或箭头被截断,只需适当扩大xlim/ylim的数值即可;

中文标签乱码

:R 默认不支持中文,只需在绘图前设置中文字体(SimHei = 黑体、Microsoft YaHei = 微软雅黑)即可解决。

总结

新版 R 中ggdag的兼容问题确实让人头疼,但只要掌握「dagitty定义逻辑 +ggplot2原生绘图」的核心思路,就能彻底告别报错,绘制出专业、美观、可自定义的 DAG 图。这套代码的核心优势在于无兼容限制、可高度扩展、样式自由定制,不仅适用于简单的三元 DAG 模型,也能适配多变量、复杂路径的因果模型,是医学科研和数据分析中绘制 DAG 的 “万能模板”。以后再遇到 DAG 绘图问题,无需再纠结版本兼容,直接用这套纯原生代码,一键运行、灵活修改,轻松搞定因果关系可视化!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 20:16:27 HTTP/2.0 GET : https://f.mffb.com.cn/a/471480.html
  2. 运行时间 : 0.174636s [ 吞吐率:5.73req/s ] 内存消耗:4,528.59kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=8256cd73fd91fa6d1d467d1a10eb7fdf
  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.000502s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000892s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000328s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000258s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000463s ]
  6. SELECT * FROM `set` [ RunTime:0.001253s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000696s ]
  8. SELECT * FROM `article` WHERE `id` = 471480 LIMIT 1 [ RunTime:0.004285s ]
  9. UPDATE `article` SET `lasttime` = 1770466587 WHERE `id` = 471480 [ RunTime:0.004135s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.004075s ]
  11. SELECT * FROM `article` WHERE `id` < 471480 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.002571s ]
  12. SELECT * FROM `article` WHERE `id` > 471480 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.012013s ]
  13. SELECT * FROM `article` WHERE `id` < 471480 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.021587s ]
  14. SELECT * FROM `article` WHERE `id` < 471480 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.023065s ]
  15. SELECT * FROM `article` WHERE `id` < 471480 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.019538s ]
0.178831s