【发布时间】:2019-02-03 05:57:53
【问题描述】:
我想在 ggplot 中安排多行多列的多个图例。但是目前,从文档中我只能决定方向或操作 1 个图例中的行/列。我忽略了什么吗?感谢您提供解决方案的任何参考点。 这是示例代码以及我所做的以及预期的结果。
data <- seq(1000, 4000, by=1000)
colorScales <- c("#c43b3b", "#80c43b", "#3bc4c4", "#7f3bc4")
names(colorScales) <- data
ggplot() +
geom_point(aes(x=data, y=data, color=as.character(data), fill=data, size=data),
shape=21) +
scale_color_manual(name="Legend 1",
values=colorScales) +
scale_fill_gradientn(name="Legend 2",
labels=comma, limits=c(0, max(data)),
colours=rev(c("#000000", "#FFFFFF", "#BA0000")),
values=c(0, 0.5, 1)) +
scale_size_continuous(name="Legend 3") +
theme(legend.direction = "vertical", legend.box = "vertical")
ggplot() +
geom_point(aes(x=data, y=data, color=as.character(data), fill=data, size=data),
shape=21) +
scale_color_manual(name="Legend 1",
values=colorScales) +
scale_fill_gradientn(name="Legend 2",
labels=comma, limits=c(0, max(data)),
colours=rev(c("#000000", "#FFFFFF", "#BA0000")),
values=c(0, 0.5, 1)) +
scale_size_continuous(name="Legend 3") +
theme(legend.direction = "vertical", legend.box = "horizontal")
ggplot() +
geom_point(aes(x=data, y=data, color=as.character(data), fill=data, size=data),
shape=21) +
scale_color_manual(name="Legend 1",
values=colorScales) +
scale_fill_gradientn(name="Legend 2",
labels=comma, limits=c(0, max(data)),
colours=rev(c("#000000", "#FFFFFF", "#BA0000")),
values=c(0, 0.5, 1)) +
guides(colour = guide_legend(nrow = 2, byrow = T, override.aes=list(size=4))) +
guides(size = guide_legend(nrow = 2, byrow = T)) +
scale_size_continuous(name="Legend 3") +
theme(legend.direction = "vertical", legend.box = "vertical")
我想要的是这个:
【问题讨论】:
-
顺便说一句,您是否考虑过使用
plotly- 我发现它在安排项目方面有更多选择。 -
一种解决方法可以是绘制 3 个单独的图,提取它们的图例,然后使用
cowplot::plot_grid以某种方式将它们组合在一起 cran.r-project.org/web/packages/cowplot/vignettes/… -
你不能用开箱即用的
ggplot2做你想做的事,也就是说,我很确定你没有忽略任何事情。如果您不介意弄乱例如,您可以手动创建其他安排。cowplot::get_legend和cowplot::plot_grid. -
gtable::gtable_filter还允许您提取图例,然后可以使用gridExtra::annotation_custom、See details here 将其放置在绘图上的任何位置