使用ggplotly时,如何将两个不同geoms的填充和alpha美学结合起来?

问题描述 投票:0回答:1

我正试图在交互式脉络图上添加一个浮雕。我看到在非交互式的环境中,这 得以 使用 alpha 比例尺 geom_rasterfill 比例尺 geom_polygon. 这样就可以了。

library(ggplot2)
library(plotly)

# load raster data
volcano_raster <- as.data.frame(volcano)
volcano_raster <- reshape(data = volcano_raster,
                          direction = "long",
                          varying = colnames(volcano_raster),
                          timevar = "y",
                          v.names = "alpha",
                          idvar = "x")[,c("x", "y", "alpha")]
rownames(volcano_raster) <- NULL
volcano_raster$f <- 0

# create polygon data
volcano_polygon <- data.frame(x = c(1, 25, 25, 1, 25, 50, 50, 25, 50, 75, 75, 50, 75, 87, 87, 75),
                              y = rep(c(61, 61, 1, 1), 4),
                              order = rep(1:4, 4),
                              group = rep(1:4, each = 4),
                              fill = rep(1:4, each = 4))

# create plot (works)
p <- ggplot()
p <- p + geom_polygon(data = volcano_polygon,
                      aes(x = x,
                          y = y,
                          fill = fill,
                          group = group))
p <- p + geom_raster(data = volcano_raster,
                     aes(x = x, y = y, alpha = alpha))
p

使用ggplot进行绘图

但是,当我尝试着通过 ggplotly,R抱怨说 fill 审美缺失。

> ggplotly(p)
Error in `[.data.frame`(g, , c("fill_plotlyDomain", "fill")) : 
  undefined columns selected

为了避免这个错误,我试着添加了一个虚拟的东西。fill 审美。然而,那么 ggplotly 不显示 alpha 阴影。

# create plot (works)
p <- ggplot()
p <- p + geom_polygon(data = volcano_polygon,
                      aes(x = x,
                          y = y,
                          fill = fill,
                          group = group))
p <- p + geom_raster(data = volcano_raster,
                     aes(x = x, y = y, fill = 0, alpha = alpha))
ggplotly(p)

使用ggplotly进行绘图

我知道,从 此处 当使用一个geom时,ggplotly可以结合填充和alpha美学。这在我的情况下也是可行的。

p <- ggplot()
p <- p + geom_polygon(data = volcano_polygon,
                      aes(x = x,
                          y = y,
                          fill = fill,
                          group = group,
                          alpha = fill))
ggplotly(p)

当使用同一个geom的填充和alpha进行绘图时

遗憾的是,我无法计算出如何使用 ggplotly 使用 fill 本位 geomalpha 的另一种审美。

EDIT

这个帖子 描述了一个通过使用 geom_point 而不是 geom_raster. 但是,由于 sizegeom_point 不像 widthgeom_bar)是以像素为单位给出的,而不是相对于分辨率。因此,很难找到正确的值来表示 size 争论,使得它在交互式环境中相当不切实际。

r ggplot2 plotly ggplotly geom-raster
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.