ggplot2 中的并排水平图例

Side by side horizontal legends in in ggplot2

我想让我的 ggplot 图例并排显示在图下方,变量名称在符号上方,就像它们在 this 博客 post(第二个图)中一样. 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)

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

您需要指定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"
        )

@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"
        )

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"
            )

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

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))

您可以按照我在问题中的建议,使用 title.hjust = 0.5 将标题移到中心。但是,经过检查,这样做可能会使 reader 混淆哪个 colours/points 指的是哪个变量。