ggplotly对数变换颜色刻度下鼠标悬停值需显示原始单位的问询
解决Plotly转换带log变换的ggplot时hover显示原始值的问题
这个问题我太熟悉了——plotly在转换带刻度变换的ggplot对象时,确实会默认把变换后的值放到hover提示里,完全不考虑咱们要显示原始单位的需求😅。不过有两种简单的方法可以解决这个问题:
方法一:在ggplot阶段自定义hover文本
直接在ggplot的美学映射里添加text参数,预先定义好要显示的原始值文本,然后转换为plotly时指定使用这个自定义文本作为tooltip内容:
library(plotly) library(reshape2) library(RColorBrewer) myPalette <- colorRampPalette(brewer.pal(11, "Spectral")) # 先处理数据,保留原始值 volcano_melt <- melt(volcano) # 构建ggplot时,添加text映射原始value p <- ggplot(volcano_melt, aes(Var1, Var2, fill = value, text = paste("Z值:", value))) + geom_tile() + scale_fill_gradientn(colours = rev(myPalette(100)), trans = "log") # 转换为plotly,指定tooltip使用自定义text ggplotly(p, tooltip = "text")
这样操作后,鼠标悬停时会显示原始的Z值,而图例的刻度依然保持log变换后的样式,完美匹配你的需求。
方法二:转换后修改Plotly对象的hover内容
如果已经有了现成的ggplot对象,也可以在转换为plotly后,手动替换hover文本:
# 先构建原始的ggplot对象 p <- volcano %>% melt() %>% ggplot(aes(Var1, Var2, fill = value)) + geom_tile() + scale_fill_gradientn(colours = rev(myPalette(100)), trans="log") # 转换为plotly对象 p_plotly <- ggplotly(p) # 替换hover文本为原始值 p_plotly$x$data[[1]]$text <- paste("Z值:", volcano_melt$value) # 查看结果 p_plotly
原理说明
ggplot里的trans="log"只是对颜色刻度的视觉映射做了log变换,并没有修改原始数据的value字段。但plotly在转换时错误地把变换后的填充值当成了hover显示内容,所以咱们只需要手动指定用原始的value生成hover文本,就能纠正这个问题啦。
内容的提问来源于stack exchange,提问作者Yollanda Beetroot
相关产品推荐
相关产品推荐

