13

预期行为

如果我用 ggplot2 创建一个绘图并使用单独的形状和填充比例来描绘数据,我希望图例会在“白色”填充点(看起来是空心的)和“黑色”填充点(看起来不空洞的)。

在下面的示例代码中,Windows 的图例项应为白色空心点,Linux 的图例项应为黑色填充点

实际行为

“操作系统”下的图例项描绘了两个视觉上相同的点,它们是明显不同的操作系统,其点在图表上用不同的填充清楚地绘制。在下面的示例代码中,Windows 和 Linux 在图例中都显示为无法区分的黑色空心点,即使它们在绘图本身上以不同的方式正确绘制。

样本图

图例中填充行为损坏的示例图

示例代码

library(ggplot2)

x <- rnorm(n = 30)
y <- rnorm(n = 30)
treatment <- rep(c("red", "green", "blue"), times = 20)
operatingSystem <- rep(c("Windows", "Linux"), times = 30)

dd <- data.frame(x, y, treatment, operatingSystem)

fillScaleValues <- c(
  "Windows" = "white",
  "Linux" = "black"
)

shapeScaleValues <- c(
  "red" = 21,
  "green" = 22,
  "blue" = 23
)

p <- ggplot(
      aes(x = x, 
          y = y,
          shape = factor(treatment),
          fill = factor(operatingSystem)
      ), data = dd
     )

p <- p + geom_point()
p <- p + scale_fill_manual(values = fillScaleValues, name = "Operating System")
p <- p + scale_shape_manual(values = shapeScaleValues, name = "Treatment")

p

会话信息

R version 2.15.1 (2012-06-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] C/en_US.UTF-8/C/C/C/C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggplot2_0.9.2.1       reshape2_1.2.1        plyr_1.7.1            ProjectTemplate_0.4-2
[5] testthat_0.7         

loaded via a namespace (and not attached):
 [1] MASS_7.3-21        RColorBrewer_1.0-5 colorspace_1.1-1   dichromat_1.2-4   
 [5] digest_0.5.2       evaluate_0.4.2     grid_2.15.1        gtable_0.1.1      
 [9] labeling_0.1       memoise_0.1        munsell_0.4        proto_0.3-9.2     
[13] scales_0.2.2       stringr_0.6.1      tools_2.15.1      
4

1 回答 1

15

You have to override the shape that's being used in the legend, as seen in this question.

So using your example code (thanks for the clear, reproducible question, by the way), all you need to do is:

p + guides(fill = guide_legend(override.aes = list(shape = 21)))

Which gives you what you wanted:

Proper legend

于 2012-09-19T06:30:44.447 回答