gpt4 book ai didi

r - ggplot : combining size and color in legend

转载 作者:行者123 更新时间:2023-12-02 13:28:25 25 4
gpt4 key购买 nike

我最近才开始学习 R。现在我想做的是将两个图例整合到同一个情节中。换句话说,我希望默认尺寸图例根据其尺寸改变颜色。

我一直在谷歌上搜索几个解决方案,显然这些解决方案似乎都不起作用,但同样,我是 R 新手,所以也许我只是做错了什么。

我的代码:

ggplot(Caschool, aes(x=testscr, y=avginc), colour="green") +
geom_point(aes(size=enrltot, color=enrltot)) +
geom_smooth(colour="blue") +
labs(x="Test Score", y="Average Income", title="California Test Score Data", color="Number of Students\nPer District") +
theme(
panel.grid.minor = element_blank(),
panel.grid.major=element_line(colour="grey", size=0.4),
panel.background=element_rect(fill="beige"),
axis.line=element_line(size = 1.2, colour = "black"),
plot.title = element_text(size = rel(2))) +
scale_color_continuous(limits=c(0, 30000), breaks=seq(0,30000, by=2500)) +
guides(color= guide_legend(), size=guide_legend())

显然,我不被允许发布图片,否则我会展示到目前为止的样子。

最佳答案

ggplot2 确实可以将大小和颜色图例合并为一个,但是,这只在它们兼容的情况下才有效:它们需要具有完全相同的中断,否则它们无法组合。

让我举个例子:假设您想要将 0 到 10 之间的值映射到尺寸和颜色上。您告诉 ggplo2 对于低于 5 的值使用小点,对于较大的值使用大点。然后,它将按照预期绘制一个带有小点和大点的图例。现在,您还想添加颜色,并且要求低于 3 的点为绿色,高于 3 的点为蓝色。 ggplot2 也会为此绘制一个图例,但不可能将两个图例结合起来。小点必须是绿色和蓝色的。该问题可以通过使用相同的颜色和大小中断来解决。

在您的示例中,您手动更改颜色比例的分隔符,但不更改尺寸比例的分隔符。这会导致无法组合的不兼容图例。

我无法使用您的日期来证明这一点,因为我没有它。因此,我将使用 mtcars 创建一个示例。图例不兼容的变体构造如下:

p <- ggplot(mtcars, aes(x=mpg, y=drat)) +
geom_point(aes(size=gear, color=gear)) +
scale_color_continuous(limits=c(2, 5), breaks=seq(2, 5, by=0.5)) +
guides(color= guide_legend(), size=guide_legend())

给出了以下图:

enter image description here

如果我现在添加相同的大小分隔符,

p + scale_size_continuous(limits=c(2, 5), breaks=seq(2, 5, by=0.5))

我得到一个只有一个图例的情节:

enter image description here

对于您的代码,这意味着您应该将以下内容添加到绘图中:

+ scale_size_continuous(limits=c(0, 30000), breaks=seq(0,30000, by=2500))

一点旁白:您在调用 ggplot 时使用 colour = "green" 的目的是什么?我认为这根本没有任何效果,因为您在稍后使用的两个几何图形中再次设置了颜色。也许是该情节较旧版本的遗物?

关于r - ggplot : combining size and color in legend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32649426/

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