我试图制作一个包含矩形的图。我正在使用ggplot2创建它们,并希望通过将它们转换为plotly对象来“使它们成为交互式”。 现在的问题是,转换为plotly似乎松散了ggplot2中指定的矩形颜色。
以下是一个小型自解释代码示例:
test.dat <- data.frame(xmin=c(0,1.5), ymin=c(-1,-1), xmax=c(1,2), ymax=c(1,1), col=c("blue", "red"))
ggp.test <- ggplot() + geom_rect(data=test.dat, aes(xmin=xmin, ymin=ymin, xmax=xmax, ymax=ymax), fill=test.dat$col) + theme_bw()
ggp.test
ply.test <- plotly_build(ggp.test)
ply.test
有趣的是,当我指定下面的悬停信息时,颜色是正确的:
test.dat <- data.frame(xmin=c(0,1.5), ymin=c(-1,-1), xmax=c(1,2), ymax=c(1,1), col=c("blue", "red"), hovinf=c("rec1", "rec2"))
ggp.test <- ggplot() + geom_rect(data=test.dat, aes(xmin=xmin, ymin=ymin, xmax=xmax, ymax=ymax, text=paste("hoverinfo:", hovinf)), fill=test.dat$col) + theme_bw()
ply.test <- plotly_build(ggp.test)
ply.test
有人可以解释这种现象吗?
答案 0 :(得分:1)
它与指定颜色的方式有关。由于您直接添加fill
参数而不是aes
内部,因此没有任何美学将彼此分开。 ggplot似乎自动覆盖了这个,但它没有正确地导出到plotly。当您将hovinf
添加为text
aes
时,它可以使用该美学来区分这些美学,并能够为其提供适当的颜色。添加另一种美学也使其有效,例如使用group
:
test.dat <- data.frame(xmin=c(0,1.5), ymin=c(-1,-1), xmax=c(1,2), ymax=c(1,1), col=c("blue", "red"))
ggp.test <- ggplot() + geom_rect(data=test.dat, aes(xmin=xmin, ymin=ymin, xmax=xmax, ymax=ymax, group = col), fill=test.dat$col) + theme_bw()
ggp.test
ply.test <- plotly_build(ggp.test)
ply.test