1

我正在尝试为交互式等值线地图添加缓解措施。我看到在非交互式设置中,这可以使用 的alpha比例geom_raster和 的fill比例来完成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美学。但是,thenggplotly不显示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 时绘图

我从这里知道 ggplotly 在使用一个几何图形时可以结合填充和 alpha 美学。这也适用于我的情况:

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

使用同一几何图形的填充和 alpha 时绘图

不幸的是,我无法弄清楚如何使用一个人的审美和另一个人的审美来ggplotly创建fill一个geom情节alpha

编辑:

这篇文章描述了一种通过使用geom_point而不是geom_raster. 但是,sizeof geom_point(与 不同widthgeom_bar以像素为单位给出,与分辨率无关。因此,很难为size参数找到正确的值,这对于交互式设置来说相当不切实际。

4

0 回答 0