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

时间:2015-09-18 10:11:05

标签: 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())

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

1 个答案:

答案 0 :(得分:8)

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())

给出了以下情节:

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))

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