我正在尝试为交互式等值线地图添加缓解措施。我看到在非交互式设置中,这可以使用 的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
但是,一旦我尝试通过 进行交互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 在使用一个几何图形时可以结合填充和 alpha 美学。这也适用于我的情况:
p <- ggplot()
p <- p + geom_polygon(data = volcano_polygon,
aes(x = x,
y = y,
fill = fill,
group = group,
alpha = fill))
ggplotly(p)
不幸的是,我无法弄清楚如何使用一个人的审美和另一个人的审美来ggplotly
创建fill
一个geom
情节alpha
。
编辑:
这篇文章描述了一种通过使用geom_point
而不是geom_raster
. 但是,size
of geom_point
(与 不同width
)geom_bar
以像素为单位给出,与分辨率无关。因此,很难为size
参数找到正确的值,这对于交互式设置来说相当不切实际。