如何在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
相关产品推荐
相关产品推荐

