使用ggplot从单列中绘制多条线

3

我有一个如下所示的数据框。我需要基于区域,日期作为x轴和AveElapsedTime作为y轴进行绘图。

     >avg_data
             date  region AveElapsedTime
    1  2012-05-19 betasol           1372
    2  2012-05-22  atpTax           1652
    3  2012-06-02 betasol           1630
    4  2012-06-02  atpTax           1552
    5  2012-06-02     Tax           1552
    6  2012-06-07 betasol           1408
    7  2012-06-12 betasol           1471
    8  2012-06-15 betasol           1384
    9  2012-06-21 betasol           1390
    10 2012-06-22  atpTax           1252
    11 2012-06-23 betasol           1442

如果我根据地区重新排列上述内容,结果如下。如果特定日期没有值(NA),则不应绘制。

            date atpTax betasol  Tax
    1 2012-05-19     NA    1372   NA
    2 2012-05-22   1652      NA   NA
    3 2012-06-02   1552    1630 1552
    4 2012-06-07     NA    1408   NA
    5 2012-06-12     NA    1471   NA
    6 2012-06-15     NA    1384   NA
    7 2012-06-21     NA    1390   NA
    8 2012-06-22   1252      NA   NA
    9 2012-06-23     NA    1442   NA

我尝试使用下面的ggplot命令,但是出现了geom_path错误。
    ggplot(avg_data, aes(date, AveElapsedTime)) + geom_line(aes(col=region)) + opts(axis.text.x = theme_text(angle=90, hjust=1))
    geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?

    > str(avg_data)
    'data.frame':   11 obs. of  3 variables:
     $ date          : Factor w/ 9 levels "2012-05-19","2012-05-22",..: 1 2 3 3 3 4 5 6 7 8 ...
     $ region        : Factor w/ 3 levels "atpTax","betasol",..: 2 1 2 1 3 2 2 2 2 1 ...
     $ AveElapsedTime: int  1372 1652 1630 1552 1552 1408 1471 1384 1390 1252 ...

请就此提供建议。

1
我强烈怀疑你的日期被转化为因子,ggplot2现在正在抱怨因为x轴上的每个点都被视为一个单独的组。请问这些列的类型是什么 (即 str(avg_data) 的结果)?你可以使用 avg_data <- transform(avg_data,date=as.Date(date)) 吗?或者,采用蛮力解决方案,将 group=region 添加到你的 geom_line 映射中。 - Ben Bolker
它可以正常工作,如果我将其转换为日期格式。但是否有一种选项可以显示日期列中存在的所有日期? - Tamilan
你可以使用 +scale_x_date(breaks=...) 来指定日期刻度 (参见 ?scale_x_date),或者像我和 @Andrie(在他的回答中)建议的那样使用 group=region - Ben Bolker
1个回答

9

正如错误信息所示,您需要指定 group。像这样:

ggplot(avg_data, aes(date, AveElapsedTime, colour=region, group=region)) + 
  geom_point() + geom_line()

enter image description here


2
这条消息几乎没有任何意义,就像在R中一样。 - nccc

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