为什么我的图表的Y轴顺序不正确?

时间:2015-06-18 13:03:01

标签: r ggplot2

我正在尝试绘制一个如下所示的数据框图:

year week cases
2003    1     0
2003    2     0
2003    3    12
2003    4    23
2003    5    12
2003    6    16
2003    7    20
2003    8    13
2003    9     0
2003   10     0
2003   11    21
2003   12   133
2003   13     9
2003   14    22

从2003年至2012年运行52周的数据。

这是运行dput(head(df,20)给我的内容:

structure(list(year = c(2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 
2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 
2003L, 2003L, 2003L, 2003L, 2003L), week = 1:20, cases = c(2, 
2, 26, 146, 26, 70, 115, 37, 2, 2, 124, 41, 245, 135, 146, 163, 
26, 26, 92, 92)), .Names = c("year", "week", "cases"), row.names 1925:1944, class = "data.frame")

我希望我的Y轴只是变量' case'的范围,X轴从第1周到第52周运行。我想绘制每年的数据点不同的颜色。

这是我的ggplot2代码:

ggplot(df, aes(x=week, y=cases, col=year)) + geom_point()

这是它产生的图表:

graph

为什么会这样?我认为没有理由为什么我的Y轴不应该只是'案件的范围'按升序排列。

1 个答案:

答案 0 :(得分:1)

总结评论中的内容:

您的y轴确实已经排序但是根据字符值(或者更确切地说是因子级别,因为您的变量是作为因子导入的)而不是数字值(所以1, 10, 11, ..., 2, 20, ...

有两个问题需要解决:
第一个是你必须理解为什么变量没有作为数字导入。你可能有一个"奇怪的"值(例如1,2,例如逗号而不是点作为小数分隔符)
第二个是您需要数值来正确绘制数据。为此,您可以使用df$cases <- as.numeric(as.character(df$cases))转换因子。 请注意,奇怪的值会转换为NAs,您可能不希望这样。

最后请注意,如果您不希望将字符变量导入为因子,则可以在导入步骤中使用参数stringsAsFactors=FALSE