ggplot2:图例重叠在绘图区域上 - 是否可以手动调整图例位置?

6
假设我有一个数据集,记录了不同田地和品种的胡萝卜产量:
carrots<-list(Yield=c(345,226,74,559,288,194),
          Field=c("A","B","C","D","E","F"),
          Breed=rep(c("Long","Short"),each=3))
carrots<-data.frame(carrots)

我想绘制一个条形图,显示每个领域的产量,并按品种着色:
ggplot(carrots,aes(y=Yield,x=Field,fill=Breed)) +
   geom_bar() +
   opts(legend.direction = "horizontal",
        legend.position = "top") +
   labs(fill="")

但是图例总是略微重叠绘图区域:

plot with slight legend overlap
(来源:users.utu.fi)

我尝试手动调整图例位置到绘图区域之外,例如使用以下代码:

opts(legend.position=c(0.5,1.1)

但是,图形边距截断了图例,我不确定如何调整它们。有没有更细微的解决方案?


2
尽管您可以通过调用“data.frame”而不是“list”来删除数据准备的第二步骤,但建议提供一个可重现的示例,这会让问题更易于理解。 - Roman Luštrik
谢谢Roman,任何R语言的建议都受到欢迎 :) - susjoh
1个回答

9

在我的环境中,图例完全不会重叠绘图区域,但无论如何,重叠的是图例的背景,所以您可以通过以下方式将其删除:

ggplot(carrots,aes(y=Yield,x=Field,fill=Breed)) +
 geom_bar() +
 opts(legend.direction = "horizontal",
    legend.position = "top",
        legend.background = theme_blank()) + # this does hack
 labs(fill="")

谢谢kohske,这正是我需要的简单解决方案。奇怪的是这不是普遍适用的 - 我使用的是Windows中的R 2.13.0。 - susjoh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接