并排在ggplot2中的水平图例

时间:2015-01-21 11:03:17

标签: r ggplot2

我想让我的ggplot传说并排出现在情节下方,变量名称在符号上方,因为它们位于this博客文章(第二个情节)中。 opts函数现已停用,theme似乎无法复制其行为......

library("ggplot2")
ggplot(diamonds, aes(x = carat, y=price, shape = cut, group=interaction(cut, color), color=color)) +
geom_point() +
#opts(legend.direction = "horizontal", legend.position = "bottom")
#potential options, not all seem have an effect...
theme(legend.direction = "horizontal") +
theme(legend.position = "bottom") +
theme(legend.box = "vertical") +
theme(legend.title.align = 0)

enter image description here

...使用我的MS绘画技巧来说明所需的情节。

3 个答案:

答案 0 :(得分:19)

您需要指定theme(legend.box = "horizontal")

试试这个:

library("ggplot2")
ggplot(diamonds, aes(x = carat, y=price, shape = cut, group=interaction(cut, color), color=color)) +
  geom_point() +
  theme(legend.direction = "horizontal", 
        legend.position = "bottom",
        legend.box = "horizontal"
        )

enter image description here

答案 1 :(得分:10)

使用legend.box = "horizontal"修改之前的建议,我发现您可以使用title.position = "top"功能指南中的scale_在顶部获取图例标题。必须为构成图例的每个变量定义这些变量,否则标题将在左侧。

ggplot(data = diamonds, 
       mapping = aes(x = carat, y = price, shape = cut,
                     group=interaction(cut, color), color=color)) +
  geom_point() +
  theme(legend.box = "horizontal",
        legend.position="bottom") +
  scale_shape(guide = guide_legend(title.position = "top")) +
  scale_colour_discrete(guide = guide_legend(title.position = "top", nrow = 1))

enter image description here

您可以使用title.hjust = 0.5将标题转移到中心,正如我在问题中所建议的那样。但是,经过检查,这样做可能会使读者混淆哪些颜色/点指的是哪个变量。

答案 2 :(得分:4)

@gjbel - 我想将图例上方的图例标题设置为需要将图例方向从水平方向更改为垂直方向,或者完全删除图例方向,因为默认值是垂直的:

library("ggplot2")
ggplot(diamonds, aes(x = carat, y=price, shape = cut, group=interaction(cut, color), color=color)) +
  geom_point() +
  theme(legend.direction = "vertical", 
        legend.position = "bottom",
        legend.box = "horizontal"
        )

OR

library("ggplot2")
    ggplot(diamonds, aes(x = carat, y=price, shape = cut, group=interaction(cut, color), color=color)) +
      geom_point() +
      theme(legend.position = "bottom",
            legend.box = "horizontal"
            )