over 2 years ago

最近刚刚接触到R,在学习过程中发现一个问题。我有一组数据大概是这样:

Year     Percentage
1950        20%
1955        21%
1960        22%
...

在我画图时报错:

> ggplot(china, aes(x = year, y = n)) +
  geom_line()

geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?

通过检查变量类型,发现年份数据是Factor类型而不是Numeric类型:

$ year   : Factor w/ 21 levels "1950","1955",..: 1 2 3 4 5 6 7 8 9 10 ...

后来在Stackoverflow上发现了解决方案:

as.numeric(as.character(year))

year这个变量被做了两次转换,第一次是把它从Factor类型转换成Character类型,然后再从Character类型转换成Numeric类型。为什么不能将year直接转换成Numeric类型呢?我尝试了直接转换:

> as.numeric(china$year)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21

原本1950, 1955, 1960 ... 被转换成了1, 2, 3... 这样的问题在于,当你绘图时,X轴上原本应该显示年份,但却被1, 2, 3所代替:

所以为了避免出现这种情况,需要对数据进行两次转换。


刚刚发现了另外一种方法:

ggplot(china, aes(x = year, y = n)) +
  geom_line(aes(group=1))

但需要注意的是,如果要加入X轴坐标的话,需要使用:

scale_x_discrete  #不能使用scale_x_continuous,因为年份数据不是连续性的
← 在Mac OSX上安装R 推荐一些Sublime 3的主题和字体 →
 
comments powered by Disqus