在ggplot2中绘制线条和群体美学

时间:2012-04-27 21:00:20

标签: r ggplot2

这个问题来自早期的question and its answers.

首先是一些玩具数据:

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在group中包含geom_line美学。但是,如果在p3中删除了group美学,则不会绘制线条。

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

enter image description here

1 个答案:

答案 0 :(得分:45)

Hadley himself的话说:

  

重要的是[对于横轴上有因子的线图]是手动指定分组。通过   默认ggplot2使用所有分类变量的组合   分组geoms的情节 - 这对于这个情节不适用,因为你   获得每个点的单独一行。手动指定group = 1   表示您想要一条连接所有点的线。

您实际上可以用不同的方式对点进行分组as demonstrated by koshke here