ggplot2图例到底部和水平


109

如何将ggplot2图例移至图的底部并水平旋转?

样例代码:

library(reshape2) # for melt
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend())

所需(近似)结果: 在此处输入图片说明


2
7年零8个月后,我终于想出了如何获得该问题的理想结果:)向下滚动至第二个答案。
亚瑟·叶

Answers:


146

如果要移动图例的位置,请使用以下代码:

library(reshape2) # for melt
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend()) +
    theme(legend.position="bottom")

这应该给您期望的结果。 底部的图例


2
您知道是否可以在底部绘制连续的图例栏吗?(因此,不要在中间加上数字)。谢谢。
2012年

3
使用current ggplot,这给了我警告'opts' is deprecated. Use 'theme' instead. (Deprecated; last used in version 0.9.1)optstheme工作取代。
krlmlr

是的,我预计ggplot
Shreyas Karnik

10
使用折旧物料是一种不好的做法。您可以使用主题完全相同的方式来执行此操作:+ theme(legend.position='bottom')
by13 2013年

不幸的是,数字和颜色并排时会有些歧义。请参阅下面的一些尝试来对此进行改进的答案。
亚瑟·叶

37

这是创建所需结果的方法:

library(reshape2); library(tidyverse)
melt(outer(1:4, 1:4), varnames = c("X1", "X2")) %>%
ggplot() + 
  geom_tile(aes(X1, X2, fill = value)) + 
  scale_fill_continuous(guide = guide_legend()) +
  theme(legend.position="bottom",
        legend.spacing.x = unit(0, 'cm'))+
  guides(fill = guide_legend(label.position = "bottom"))

reprex软件包(v0.3.0)创建于2019-12-07


编辑:不再需要这些不完美的选项,但我在这里留作参考。

两种不完美的选项不能完全满足您的要求,但是非常接近(至少可以将颜色组合在一起)。

library(reshape2); library(tidyverse)
df <- melt(outer(1:4, 1:4), varnames = c("X1", "X2"))
p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value))
p1 + scale_fill_continuous(guide = guide_legend()) +
 theme(legend.position="bottom", legend.direction="vertical")

p1 + scale_fill_continuous(guide = "colorbar") + theme(legend.position="bottom")

reprex软件包(v0.2.1)创建于2019-02-28


尽管从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
Rohit Gupta 2015年

我现在增强了答案,提供了两个不完善的解决方案
Arthur Yip,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.