我正在尝试在 ggplot 中制作折线图,但我很难诊断我的错误。我已经通读了几乎所有类似的线程,但一直无法解决我的问题。
我正在尝试绘制日本的 CPI。我从 FRED 在线下载了数据。
我的 str 看起来像:
str(jpycpi)
data.frame: 179 obs. of 2 variables:
$ DATE : Factor w/ 179 levels "2000-04-01","2000-05-01",..: 1 2 3 4 5 6 7 8 9 10 ...
$ JPNCPIALLMINMEI: num 103 103 103 102 103 ...
我的绘图代码:
ggplot(jpycpi, aes(x=jpycpi$DATE, y=jpycpi$JPNCPIALLMINMEI)) + geom_line()
它给我一个错误提示:
geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?
我已经尝试了以下方法并且能够绘制它,但是 x 条形图由于某些奇怪的原因而扭曲了。该代码如下:
ggplot(jpycpi, aes(x=jpycpi$DATE, y=jpycpi$JPNCPIALLMINMEI, group=1)) + geom_line()
最佳答案
出现“每组仅包含一个观察”错误消息是因为您的 x 审美是一个因素。 ggplot 认为这意味着您的自变量是分类的,这与 geom_line
结合没有意义。
在这种情况下,正确的修复方法是将该列数据转换为 Date
向量。 ggplot 了解如何将 R 的所有日期/时间类用作 x 美学。
从因子转换为日期有点棘手。直接转换,
jpycpi$DATE <- as.Date(jpycpi$DATE)
在 R 版本 3.3.1 中工作,但是,如果我没记错的话,在旧版本的解释器中会给出无意义的结果,因为 as.Date
只会查看 ordinals 的因素水平,而不是在他们的标签。相反,应该写
jpycpi$DATE <- as.Date(as.character(jpycpi$DATE))
从因子到字符向量的转换会查看标签,因此后续转换为 Date 对象将做正确的事情。
您可能首先得到了 $DATE 的因子,因为您使用了 read.table
或 read.csv
来加载数据集。这些函数的默认行为是尝试将每一列转换为数值向量,如果失败,则将其转换为一个因子。 (有关确切的行为,请参阅?type.convert
。)如果您要导入大量包含日期列的数据,则值得学习如何将 colClasses
参数用于 read.table
;这样效率更高,并且没有上述问题。
关于R:ggplot::geom_path:每组仅包含一个观察值。需要调整群体审美吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38427163/