ggiraph 中缺少 geom_line_interactive 的工具提示
Tooltip missing for geom_line_interactive in ggiraph
我想将工具提示添加到 ggsurvplot
。我正在使用 ggiraph
来显示情节。由于 ggiraph
没有 geom_step_interactive
,我正在操纵 ggsurvplot
的数据输出以获取阶跃函数值并使用 geom_line_interactive
在我的 ggsurvplot 上叠加一条线并添加工具提示。这是正确工作的代码:
library(ggiraph)
library(survminer)
library(survival)
#Function to get the step function points
step_func <- function(data, direction="hv", x , y) {
direction <- match.arg(direction, c("hv", "vh"))
data <- as.data.frame(data)[order(data[, x]), ]
n <- nrow(data)
if (n <= 1) {
# Need at least one observation
return(data[0, , drop = FALSE])
}
if (direction == "vh") {
xs <- rep(1:n, each = 2)[-2*n]
ys <- c(1, rep(2:n, each = 2))
} else {
ys <- rep(1:n, each = 2)[-2*n]
xs <- c(1, rep(2:n, each = 2))
}
return(data.frame(
x = data[,x][xs],
y = data[,y][ys],
data[xs, setdiff(names(data), c(x, y))]
))
}
fit<- survfit(Surv(time, status) ~ sex, data = lung )
g <- ggsurvplot(fit, data = lung, risk.table = TRUE,
risk.table.pos= "out", risk.table.y.text = TRUE)
dat1 <- plyr::ddply(g$plot$data, "strata", step_func, "hv", "time", "surv")
dat1$tooltip <- paste0("Time:", dat1$x)
gg<- g$plot+geom_line_interactive(data = dat1, aes(x= x, y=y, colour = strata, tooltip= tooltip ), size = .75)
ggiraph(code = print(gg))
使用上面的代码,我得到了以下带有工具提示的图,如图所示:
我希望工具提示不仅显示时间而且还显示生存概率,为此我稍微更改了代码如下:
dat1$tooltip <- paste0("Time:", dat1$x, "Surv:", dat1$y )
这会导致工具提示消失。
我做错了什么?
geom_line_interactive
工具提示似乎在太长时消失了。您可以截断值结果以使其简短。以下作品:
dat1$tooltip <- paste0("Time:", dat1$x, " Surv:", round(dat1$y,2) )
但是将值设置为 3 会导致它们消失。我不完全确定这一点,因为工具提示 非常繁琐 并且似乎仅在鼠标位于正确位置时才会出现。可能是超过一定长度的都被抑制了。
不过我确实注意到,如果您使用 geom_point_interactive
而不是 geom_line_interactve
并使用更大的 size
参数值,整个工具提示的效果会更好。这可能就是你想要做的。
可能是 geom_line_interactive
忽略了 size
参数。
这个图是geom_point_interactive
,上面的round
参数设置为3,size
设置为1.75,效果更好
我想将工具提示添加到 ggsurvplot
。我正在使用 ggiraph
来显示情节。由于 ggiraph
没有 geom_step_interactive
,我正在操纵 ggsurvplot
的数据输出以获取阶跃函数值并使用 geom_line_interactive
在我的 ggsurvplot 上叠加一条线并添加工具提示。这是正确工作的代码:
library(ggiraph)
library(survminer)
library(survival)
#Function to get the step function points
step_func <- function(data, direction="hv", x , y) {
direction <- match.arg(direction, c("hv", "vh"))
data <- as.data.frame(data)[order(data[, x]), ]
n <- nrow(data)
if (n <= 1) {
# Need at least one observation
return(data[0, , drop = FALSE])
}
if (direction == "vh") {
xs <- rep(1:n, each = 2)[-2*n]
ys <- c(1, rep(2:n, each = 2))
} else {
ys <- rep(1:n, each = 2)[-2*n]
xs <- c(1, rep(2:n, each = 2))
}
return(data.frame(
x = data[,x][xs],
y = data[,y][ys],
data[xs, setdiff(names(data), c(x, y))]
))
}
fit<- survfit(Surv(time, status) ~ sex, data = lung )
g <- ggsurvplot(fit, data = lung, risk.table = TRUE,
risk.table.pos= "out", risk.table.y.text = TRUE)
dat1 <- plyr::ddply(g$plot$data, "strata", step_func, "hv", "time", "surv")
dat1$tooltip <- paste0("Time:", dat1$x)
gg<- g$plot+geom_line_interactive(data = dat1, aes(x= x, y=y, colour = strata, tooltip= tooltip ), size = .75)
ggiraph(code = print(gg))
使用上面的代码,我得到了以下带有工具提示的图,如图所示:
我希望工具提示不仅显示时间而且还显示生存概率,为此我稍微更改了代码如下:
dat1$tooltip <- paste0("Time:", dat1$x, "Surv:", dat1$y )
这会导致工具提示消失。
我做错了什么?
geom_line_interactive
工具提示似乎在太长时消失了。您可以截断值结果以使其简短。以下作品:
dat1$tooltip <- paste0("Time:", dat1$x, " Surv:", round(dat1$y,2) )
但是将值设置为 3 会导致它们消失。我不完全确定这一点,因为工具提示 非常繁琐 并且似乎仅在鼠标位于正确位置时才会出现。可能是超过一定长度的都被抑制了。
不过我确实注意到,如果您使用 geom_point_interactive
而不是 geom_line_interactve
并使用更大的 size
参数值,整个工具提示的效果会更好。这可能就是你想要做的。
可能是 geom_line_interactive
忽略了 size
参数。
这个图是geom_point_interactive
,上面的round
参数设置为3,size
设置为1.75,效果更好