5

我在这里真的需要帮助,因为我已经迷路了。

我正在尝试创建一个折线图,显示几个团队在一年内的表现。我将一年分为几个季度:2012 年 1 月 1 日、2012 年 4 月 1 日。2012 年 8 月 1 日。12/1/12 并将 csv 数据帧加载到 R 中。

     Month               Team Position
1   1/1/12       South Africa       56
2   1/1/12             Angola       85
3   1/1/12            Morocco       61
4   1/1/12 Cape Verde Islands       58
5   4/1/12       South Africa       71
6   4/1/12             Angola       78
7   4/1/12            Morocco       62
8   4/1/12 Cape Verde Islands       76
9   8/1/12       South Africa       67
10  8/1/12             Angola       85
11  8/1/12            Morocco       68
12  8/1/12 Cape Verde Islands       78
13 12/1/12       South Africa       87
14 12/1/12             Angola       84
15 12/1/12            Morocco       72
16 12/1/12 Cape Verde Islands       69

当我尝试使用 ggplot2 生成图表时,第四季度 12/1/12 莫名其妙地移动到了第二个位置。

ggplot(groupA, aes(x=Month, y=Position, colour=Team, group=Team)) + geom_line()

然后我将此图放入变量 GA 中,以尝试使用 scale_x 格式化日期:

GA + scale_x_date(labels = date_format("%m/%d"))

但我不断收到此错误:

Error in structure(list(call = match.call(), aesthetics = aesthetics,  : 

找不到函数“date_format”

如果我运行这段代码:

GA + scale_x_date()

我收到此错误:

Error: Invalid input: date_trans works with objects of class Date only

我正在使用运行 R 2.15.2 的 Mac OS X

请帮忙。

4

1 回答 1

6

这是因为 , df$Month(假设您data.framedf),它是 afactor的级别按此顺序排列。

> levels(df$Month)
# [1] "1/1/12"  "12/1/12" "4/1/12"  "8/1/12" 

解决方案是重新排序因子的水平。

df$Month <- factor(df$Month, levels=df$Month[!duplicated(df$Month)])
> levels(df$Month)
# [1] "1/1/12"  "4/1/12"  "8/1/12"  "12/1/12"

ggplot2_factor_levels

编辑:使用替代解决方案strptime

# You could convert Month first:
 df$Month <- strptime(df$Month, '%m/%d/%y')

然后你的代码应该可以工作。检查下面的情节:

ggplot2_strptime_solution

于 2013-01-18T10:47:30.727 回答