使用ggplot2绘制线条和群组美学

53

这个问题是基于之前一个问题和它的答案

首先是一些玩具数据:

df = read.table(text = 
"School      Year    Value 
 A           1998    5
 B           1999    10
 C           2000    15
 A           2000    7
 B           2001    15
 C           2002    20", sep = "", header = TRUE)

原问题询问如何为每个学校绘制价值-年份线。答案大体上对应于以下p1和p2。但也要考虑p3。

library(ggplot2)

(p1 <- ggplot(data = df, aes(x = Year, y = Value, colour = School)) +       
   geom_line() + geom_point())

(p2 <- ggplot(data = df, aes(x = factor(Year), y = Value, colour = School)) +       
  geom_line(aes(group = School)) + geom_point())

(p3 <- ggplot(data = df, aes(x = factor(Year), y = Value, colour = School)) +       
  geom_line() + geom_point())

两种方法p1和p2都能完成任务。p1和p2的区别在于,p1将Year作为数字处理,而p2将Year视为因子。此外,p2在geom_line中包含一个group美学。但是当像p3一样省略group美学时,线就不会画出来。

问题是:为什么当x轴变量为因子时需要group美学,但当x轴变量为数字时不需要group美学?

enter image description here

1个回答

56

以下是Hadley本人的话:

对于横轴为因子的折线图来说,重要的是手动指定分组。默认情况下,ggplot2使用绘图中所有分类变量的组合来分组几何图形 - 对于此绘图不起作用,因为每个点都会得到一个单独的线条。手动指定group = 1表示您希望连接所有点的单个线。

实际上,您可以以非常不同的方式对点进行分组如koshke在此处演示


所以当x是数值型时,不会做关于按因子分组观察的假设(也不能做这样的假设,因为显然x不是一个因子)。我猜在数值型x的情况下让我感到困惑的是,通过指定group = 1仍然可以得到单行结果,但没有指定group则会得到多行结果。 - Sandy Muspratt
是的,@Sandy Muspratt,在您后面的情况下,数字“x”提供了自然排序但没有分组因素,因此其他分类变量也会发挥作用。我花了一些时间来理解它,现在它就是合乎逻辑的。(感谢接受)。 - daedalus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接