gpt4 book ai didi

r - 为什么 ggplot2 图例不结合手动填充和缩放值?

转载 作者:行者123 更新时间:2023-12-04 00:56:45 25 4
gpt4 key购买 nike

预期行为

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

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

实际行为

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

样本图

Sample plot with broken fill behavior in the legend

示例代码

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

session 信息
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

最佳答案

您必须覆盖图例中使用的形状,如 this question 中所示。 .

因此,使用您的示例代码(顺便说一下,感谢您提供清晰、可重复的问题),您需要做的就是:

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

这给了你你想要的:

Proper legend

关于r - 为什么 ggplot2 图例不结合手动填充和缩放值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12488905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com