plotly让你的ggplot动起来

plotly是一个绘制交互式图形的R包。

它的功能十分强大,只需一行代码,就可以为普通的ggplot图形,添加交互性。

废话不多说,直接上代码。

以火山图为例,先附上普通的火山图代码

# 代码来源:https://www.r2omics.cn/
# 加载R包,没有安装请先安装  install.packages("包名") 
library(ggplot2)

# 读取火山图数据文件
data = read.delim("https://www.r2omics.cn/res/demodata/Volcano.txt",
                  header = T    # 指定第一行是列名
)
# 建议您的文件里对应的名称跟demo数据一致,这样不用更改后续代码中的变量名称

FC = 1.5 # 用来判断上下调,一般蛋白质组的项目卡1.5
PValue = 0.05 #用来判断上下调

# 判断每个基因的上下调,往数据框data里新增了sig列
data$sig[(-1*log10(data$PValue) < -1*log10(PValue)|data$PValue=="NA")|(log2(data$FC) < log2(FC))& log2(data$FC) > -log2(FC)] <- "NotSig"
data$sig[-1*log10(data$PValue) >= -1*log10(PValue) & log2(data$FC) >= log2(FC)] <- "Up"
data$sig[-1*log10(data$PValue) >= -1*log10(PValue) & log2(data$FC) <= -log2(FC)] <- "Down"

# 绘图
p = ggplot(data,aes(log2(FC),-1*log10(PValue))) +    # 加载数据,定义横纵坐标
  geom_point(aes(color = sig)) +                           # 绘制散点图,分组依据是数据框的sig列
  labs(title="volcanoplot",                                # 定义标题,x轴,y轴名称
       x="log[2](FC)", 
       y="-log[10](PValue)") + 
  scale_color_manual(values = c("#619cff","grey","#f8766d")) + # 自定义颜色,将values更改成你想要的三个颜色
  geom_hline(yintercept=-log10(PValue),linetype=2)+        # 在图上添加虚线
  geom_vline(xintercept=c(-log2(FC),log2(FC)),linetype=2)+
  theme_bw()
p

plotly让ggplot动起来

方法很简单,只需要调用ggplotly函数即可。得到的结果是个交互式的网页。

# 代码来源:https://www.r2omics.cn/
library(plotly)
plotly::ggplotly(p)

附录

如何自定义调整悬浮文字内容

  1. 在ggplot里添加text描述
  2. ggplotly(myPlot,tooltip=“text”)

示例:

# 代码来源:https://www.r2omics.cn/
ggplot(data,aes(log2(data$FC),-1*log10(data$PValue),
                         text = paste0("log[2](FC): ",
                                       log2(data$FC),
                                       "\n",
                                       "-log[10](PValue): ",
                                       -1*log10(data$PValue),
                                       "\n",
                                       as.character(row.names(data))                
                         )))

保存结果

htmltools::save_html()函数可以保存结果。