首页 > 解决方案 > 使工具提示出现在绘图对象中不同 ggplot2 方面的对应点上

问题描述

我正在使用ggplot2Rplotly包生成火山图,以可视化蛋白质差异丰度数据。

library(ggplot2)
library(plotly)

nVals <- 80
nFacets <- 2

#example dataset
proteins <- rep(paste0('protein_', c(1:(nVals / nFacets))), nFacets)
set.seed(1)
dat <- data.frame(log_FC = c(rnorm(nVals*0.8, 0, 1), rnorm(nVals*0.2, 0, 12)),
                  log_Pval = abs(rnorm(nVals, mean=0, sd=0.01)),
                  facet = rep(paste0('Cell line ', 1:nFacets), nVals / nFacets),
                  protein = proteins[order(proteins)])


#make ggplot2 object
p <- ggplot(dat, aes(y = log_Pval, x = log_FC, text = protein)) +
  facet_wrap(~ facet) +
  geom_point()

#convert p to plotly object with plotly::ggplotly
ggplotly(p)

电流输出示例

我正在使用工具提示功能plotly来显示与每个点关联的数据。我想扩展工具提示功能以在绘图的不同方面突出显示相同的蛋白质。

换句话说,当光标悬停在 1 个 facet 中的某个点上时,工具提示框将显示 dat$protein 在相邻 facet 的列中具有相同值的所有点上。

是我的目标的一个例子。

是否有某种方法可以自定义工具提示的行为以实现我所描述的内容?

标签: rggplot2r-plotly

解决方案


使用crosstalk,您可以让小部件相互通信。SharedData从您的数据框中创建一个对象,然后选择protein作为键。

library(crosstalk)
shared_df <- SharedData$new(dat, key = ~protein)

然后,使用shared_df而不是datwith ggplot。如果您在一个图中选择一个点,它将protein在第二个图中突出显示匹配的数据点 (by )。请让我知道这是否满足您的需求。


推荐阅读