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

如何在R语言ggdag绘制的因果图中动态添加右下角Logo

解决方案

核心逻辑是使用归一化父坐标(NPC,Normalised Parent Coordinates) 替代DAG的实际数据坐标定位,坐标范围固定为0~1,完全不依赖ggdag自动生成的节点坐标,适配所有尺寸的因果图。

完整修改后代码

library(dagitty)
library(ggplot2)
library(ggdag)
library(grid) # 新增,用于处理坐标单位

get_jpg <- function(filename) {
  grid::rasterGrob(jpeg::readJPEG(filename), interpolate = TRUE)
}
logo <- get_jpg("logo.jpg")

ex.1 <- dagitty("dag { 
X <- A -> B <- C -> Y
X <- B -> Y
X -> W -> Y
S-> T -> C
}")

exposures(ex.1) <- 'X'
outcomes(ex.1) <- 'Y'

tidy.1 <- ex.1 %>% 
  tidy_dagitty() %>%
  mutate(label = str_to_upper(name)) 

# 绘图部分修改
ggdag(tidy.1 , text = FALSE, use_labels = "label") + 
  theme_dag() +
  theme_light() +
  # 用npc单位指定相对坐标,0=左/下,1=右/上,以下参数对应右下角位置,可自行调整范围改logo大小
  annotation_custom(
    logo, 
    xmin = unit(0.8, "npc"), xmax = unit(0.98, "npc"),
    ymin = unit(0.02, "npc"), ymax = unit(0.2, "npc")
  ) +
  coord_cartesian(clip = "off") +
  theme(plot.margin = unit(c(1, 1, 3, 1), "lines"))

参数调整说明

  • 要缩小/放大logo:调整xmin与xmax的差值、ymin与ymax的差值即可,差值越大logo越大
  • 要调整logo位置:
    • 向右移调大xmin/xmax数值,向左移调小数值
    • 向上移调大ymin/ymax数值,向下移调小数值
  • 所有调整都不需要关心DAG本身的节点坐标,适配任意结构的ggdag因果图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:48:01