ggplot:在图例中组合大小和颜色

Gal*_*ton 4 r ggplot2

我最近才开始学习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())
Run Code Online (Sandbox Code Playgroud)

显然,我不允许发布图片,或者我会展示到目前为止的样子.

Sti*_*ibu 11

ggplot2 确实可以将尺寸和颜色图例组合成一个,但是,只有它们是兼容的才能起作用:它们需要具有完全相同的断点,否则它们不能组合.

让我举一个例子:假设您想要在大小和颜色上映射0到10之间的值.您告诉ggplo2小点使用小于5的值,大点使用较大值.然后它将按预期绘制一个小点和大点的图例.现在,您还想添加颜色,并且您需要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())
Run Code Online (Sandbox Code Playgroud)

给出了以下情节:

在此输入图像描述

如果我现在为大小添加相同的中断,

p + scale_size_continuous(limits=c(2, 5), breaks=seq(2, 5, by=0.5))
Run Code Online (Sandbox Code Playgroud)

我得到的情节只有一个传说:

在此输入图像描述

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

+ scale_size_continuous(limits=c(0, 30000), breaks=seq(0,30000, by=2500))
Run Code Online (Sandbox Code Playgroud)

一点点评论:你打算colour = "green"在打电话中使用ggplot什么?我没有看到它有任何影响,因为你在以后使用的两个geom中再次设置颜色.也许是一个较旧的情节变体的遗物?