【问题标题】:Plotting lines and the group aesthetic in ggplot2ggplot2中的绘图线和组美学
【发布时间】:2012-05-08 14:57:05
【问题描述】:

这个问题来自之前的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 在geom_line 中包含group 美学。但是,当group 美学在 p3 中被删除时,线条不会被绘制。

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

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    Hadley himself的话来说:

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

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

    【讨论】:

    • 因此,当x 是数字时,不会做出关于按因子对观察进行分组的假设(并且不能做出,因为显然x 不是一个因子)。我想在数字 x 的情况下让我感到困惑的是,仍然可以通过指定 group = 1 来获得单行但没有 group 规范的多行。
    • 是的,@Sandy Muspratt,在您的后一种情况下,数字 x 提供了自然排序,但没有分组依据,因此其他分类变量发挥作用。我花了一段时间才明白这一点,现在它是合乎逻辑的。 (感谢接受)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多