我正在尝试绘制一个如下所示的数据框图:
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()
这是它产生的图表:
为什么会这样?我认为没有理由为什么我的Y轴不应该只是'案件的范围'按升序排列。
答案 0 :(得分:1)
总结评论中的内容:
您的y轴确实已经排序但是根据字符值(或者更确切地说是因子级别,因为您的变量是作为因子导入的)而不是数字值(所以1, 10, 11, ..., 2, 20, ...
)
有两个问题需要解决:
第一个是你必须理解为什么变量没有作为数字导入。你可能有一个"奇怪的"值(例如1,2
,例如逗号而不是点作为小数分隔符)
第二个是您需要数值来正确绘制数据。为此,您可以使用df$cases <- as.numeric(as.character(df$cases))
转换因子。 请注意,奇怪的值会转换为NAs
,您可能不希望这样。
最后请注意,如果您不希望将字符变量导入为因子,则可以在导入步骤中使用参数stringsAsFactors=FALSE
。