如何在R的gg_vistime时间线中修改标记大小与标签字号?
问题
我已经知道如何修改vistime()生成的Plotly对象的标记大小(示例代码如下),但不清楚怎么对gg_vistime()生成的ggplot2对象做同样的操作,还希望能同时指定标记大小和标签字号,请问有可行方法吗?
library(vistime) dat <- data.frame(event = 1:4, start = c("2019-01-01", "2019-01-10", "2019-01-05", "2019-01-15"), end = c("2019-01-03", "2019-01-12", "2019-01-07", "2019-01-17")) p <- vistime(dat) # step 1: 转换为列表结构 pp <- plotly::plotly_build(p) # step 2: 遍历修改标记大小 for(i in seq_along(pp$x$data)){ if(pp$x$data[[i]]$mode == "markers") pp$x$data[[i]]$marker$size <- 20 } # 或者用purrr实现: # marker_idx <- which(purrr::map_chr(pp$x$data, "mode") == "markers") # for(i in marker_idx) pp$x$data[[i]]$marker$size <- 20 # pp pp
解决方案
gg_vistime()返回的是标准ggplot2对象,因此可以用ggplot2的原生语法直接调整标记大小和标签字号,以下是两种可行方法:
方法1:叠加图层覆盖原有属性
通过+添加新的geom_point和geom_text图层,指定所需的大小参数,同时关闭继承原有映射避免冲突:
library(vistime) library(ggplot2) # 构造完整数据(包含结束时间和颜色分组) dat <- data.frame( event = 1:4, start = c("2019-01-01", "2019-01-10", "2019-01-05", "2019-01-15"), end = c("2019-01-03", "2019-01-12", "2019-01-07", "2019-01-17"), color = c("red", "blue", "green", "orange") ) # 生成基础gg_vistime图 gg_p <- gg_vistime(dat) # 调整标记大小和标签字号 gg_p_adj <- gg_p + # 设置标记点大小为5 geom_point(size = 5, inherit.aes = FALSE, aes(x = start, y = group, color = color)) + # 设置事件标签字号为4 geom_text(aes(label = event), size = 4, inherit.aes = FALSE, aes(x = start, y = group)) + # 全局调整文字字号(坐标轴、标题等) theme( text = element_text(size = 12), axis.text = element_text(size = 10) ) # 查看调整后的图 gg_p_adj
方法2:直接修改现有图层参数
gg_vistime生成的图已经包含geom_point和geom_text图层,可以直接访问并修改这些图层的参数:
# 查看现有图层类型,确认geom_point和geom_text的索引 lapply(gg_p$layers, function(x) class(x$geom)[1]) # 修改标记点大小(假设geom_point是第2层,根据实际输出调整索引) gg_p$layers[[2]]$aes_params$size <- 5 # 修改标签字号(假设geom_text是第3层) gg_p$layers[[3]]$aes_params$size <- 4 # 全局调整主题文字大小 gg_p <- gg_p + theme(text = element_text(size = 12)) # 查看调整后的图 gg_p
注意:图层索引可能会随
vistime版本变化,建议先用lapply命令确认图层类型和对应索引后再修改。
内容的提问来源于stack exchange,提问作者jgp
相关产品推荐
相关产品推荐

