我一直在使用ggplot2开发热图,现在我正在尝试将它们转换为ggplotly,以便用它们构建一个shiny应用程序。除了geom_tile中alpha美学的翻译(如果我use geom_raster也有同样的问题),所有的东西都工作得很好(或多或少)。经过一整天的搜索和阅读相关的答案,我还没有找到任何解决方案。
我已经尝试了不同的数据和规格,到目前为止还没有任何运气。这个问题似乎是特定于热图的,因为如果我使用geom_point,alpha转换得很好。问题是,我真的需要热图来做我正在做的事情。
我已经制作了一个可重现的例子来说明这个问题。
library(ggplot2)
library(plotly)
library(dplyr)
sample<- data.frame(a = 1:10,
b = 11:20,
c = 31:40,
d = rep(c("a", "b"), 5))
plot <- sample%>%
ggplot(aes(x=a, y=b, fill = c, alpha = d))+
geom_raster()
plot
ggplotly(plot)你会看到输出是完全不同的。有没有什么想法,或者有没有人有类似的问题?
ggplot:

插图:

发布于 2019-07-16 09:05:55
我同意有些东西没有按照plotly::ggplotly()的意图进行翻译。我尝试了ggplot2::geom_rect() & ggplot2::geom_tile()和ggplot2::scale_color_manual() & ggplot2::scale_color_identity()的一些变体。
这是一个热图示例,直接写到plotly中,没有ggplot2层。我没有看到一种直接映射alpha/不透明度的方法。
这应该可以满足你的需要,如果你不需要改变阿尔法在情节中,只是需要几何尺寸是正确的。
ds <- tibble::tibble(
x = 1:10,
y = 11:20,
z = 31:40,
a1 = rep(c("a", "b"), 5),
a2 = rep(c( .1, .4), 5)
)
plot_ly(ds) %>%
add_heatmap(x = ~x, y = ~y, z = ~z, opacity = .5, colors = "YlGnBu")

如果您需要改变alpha,我猜当前最好的方法是创建一个自定义调色板来设置rgba的所有四个通道。
发布于 2019-07-18 17:22:48
如果有人遇到类似的问题,我找到了一种方法来解决这个问题(因为这似乎是一个ggplotly的错误),我用geom_point()创建了热图,并调整了点的形状和大小,直到它看起来一样。显然,ggplotly确实很好地翻译了来自geom的alpha aes。
这就是最终的结果(这款闪亮的应用程序的目标是能够选择这些具有参考年份的对角线,以便将它们与其他对角线分开):

https://stackoverflow.com/questions/57027384
复制相似问题