图例中的填充矩形图例

时间:2015-02-18 21:12:45

标签: r ggplot2 legend

我正在为客户编写图表,并且样式要求图例(a)放置在绘图区域内,(b)将填充映射到带标签的填充矩形。我目前的尝试看起来像这样:

library(ggplot2)
library(dplyr)
data(diamonds)

diamonds %>%
  group_by(color, cut) %>%
  summarise(price = mean(price)) %>%
  #
  ggplot(aes(x = color, y = price, fill = cut)) + 
  geom_bar(stat = "identity",
           position = "dodge") + 
  theme_bw() + 
  annotate("rect", xmin = "D", xmax = "E", ymin = 6000, ymax = 6500, fill = "red") + 
  annotate("text", x = 1.5, y = 6250, label = "Fair")

enter image description here

(颜色为“红色”而非ggplot红色的事实无关紧要:手动设置颜色。另外,显然我需要其他填充变量的标签)

这已足够,但我想知道:

  1. 有没有办法检测ggplot在哪里有空格并将图例放在那里(或创建用于放置图例的空白区域)?
  2. 通常是一种比annotate更自动的解决方案吗?

1 个答案:

答案 0 :(得分:0)

简短的回答是否定的,没有办法“自动检测将图例放在图中的正确位置”,至少没有总是工作的地方。在某些时候,你必须自己摆弄它。

您可以通过以下内容将默认图例移动到图中:

diamonds %>%
    group_by(color, cut) %>%
    summarise(price = mean(price)) %>%
    #
    ggplot(aes(x = color, y = price, fill = cut)) + 
    geom_bar(stat = "identity",
                     position = "dodge") + 
    theme_bw() + 
    theme(legend.position = c(0.25,0.8),
                legend.direction = "horizontal")

如果这对你很有吸引力。