转换为 ggplotly/plotly 时如何更新 ggbarplot 的自定义工具提示?

How to update to custom tool tip for ggbarplot when converting to ggplotly / plotly?

我正在使用 ggbarplot 创建条形图。我正在将 ggbarplot 转换为 plotly,以便图形在 Shiny 应用程序中是交互式的。我希望工具提示不仅显示 x 轴和 y 轴,还显示其他详细信息(即频率)。

我知道在 ggplot 中您可以添加文本参数并将其包含在 ggplotly 函数中。我不确定在使用 ggbarplot 时如何获得相同的结果。

这是我的数据和代码:

data <- structure(list(`concept name` = structure(4:1, .Label = c("NERVOUS SYSTEM", 
"ANTIBACTERIALS FOR SYSTEMIC USE", "ANTIINFECTIVES FOR SYSTEMIC USE", 
"CARDIOVASCULAR SYSTEM"), class = "factor", scores = structure(c(`ANTIBACTERIALS FOR SYSTEMIC USE` = 189734, 
`ANTIINFECTIVES FOR SYSTEMIC USE` = 200931, `CARDIOVASCULAR SYSTEM` = 201684, 
`NERVOUS SYSTEM` = 188122), .Dim = 4L, .Dimnames = list(c("ANTIBACTERIALS FOR SYSTEMIC USE", 
"ANTIINFECTIVES FOR SYSTEMIC USE", "CARDIOVASCULAR SYSTEM", "NERVOUS SYSTEM"
)))), `# of Patients` = c(201684, 200931, 189734, 188122), w_cond_rate = c(0.8921, 
0.8888, 0.8392, 0.8321), w_exp_rate = c(85.26, 83.92, 73.55, 
69.24), freq = c(89.21, 88.88, 83.93, 83.21)), class = c("data.table", 
"data.frame"), row.names = c(NA, -4L), .internal.selfref = <pointer: 0x55b1b7cd6e90>)

p <- ggbarplot(
  data = data,
  y = "# of Patients",
  x = "concept name",
  orientation = "horiz",
  fill = "#D91E49",
  color = "#D91E49",
  ylab = "Cohort Population",
  xlab = "",
  width = .5,
  text = paste("Freq:", data$freq)
  
) + theme(legend.title = element_blank()) +
  theme(plot.title = element_text(vjust = 1)) +
  theme_bw() +
  ggtitle("Distribution of Drug Treatments in US population") +
  theme(plot.title = element_text(size = 10, face = "bold")) +
  theme(plot.caption = element_text(size = 7, color = "red")) +
  theme(legend.title = element_blank())

ggplotly(p)

我想添加悬停文本中显示的 'freq' 列的值。

使用 ggplolty 显示 ggplot 的解决方案。我希望对 ggbarplot 做同样的事情。

您可以通过 + aes(text = paste("Freq:", freq)) 将您的工具提示添加到全局美学集来实现您想要的结果:

library(ggpubr)
library(plotly)

p <- ggbarplot(
  data = data,
  y = "# of Patients",
  x = "concept name",
  orientation = "horiz",
  fill = "#D91E49",
  color = "#D91E49",
  ylab = "Cohort Population",
  xlab = "",
  width = .5
) + 
  aes(text = paste("Freq:", freq)) +
  theme(legend.title = element_blank()) +
  theme(plot.title = element_text(vjust = 1)) +
  theme_bw() +
  ggtitle("Distribution of Drug Treatments in US population") +
  theme(plot.title = element_text(size = 10, face = "bold")) +
  theme(plot.caption = element_text(size = 7, color = "red")) +
  theme(legend.title = element_blank())

ggplotly(p)