如何解决在一个 GGPlot 问题上绘制多个时间序列每组仅包含一个观察值
我真的不知道为什么我不能让它工作,我尝试了很多我在网上找到的不同的东西都无济于事。这是我开始的数据:
structure(list(Date = structure(c(16923,16924,16925,16930,16931,16932),class = "Date"),bfolioTotalInvNZ = c("100","100.396798622275","100.289579106988","99.9190144893418","100.439784570027","100.124973416093"
),hpfolioTotalInvNZ = c("100","99.8882748824908","98.8225791351364","98.0760852984932","99.6998217808326","99.8428365508291"),lpfolioTotalInvNZ = c("100","100.680353722841","99.7285569078393","99.2649714247455","100.21300064583","100.043862125597"),hROATotalInvNZ = c("100","100.38312056174","100.860708831452","99.4017877917418","100.396352403539","101.764817682509"),lROATotalInvNZ = c("100","100.611388876841","99.7567183567618","99.9634937211577","101.234588176424","102.218770263564"
)),row.names = c("20160502","20160503","20160504","20160509","20160510","20160511"),class = "data.frame")
基本上是一个包含 4 年期间多个投资组合回报的列表。第一列是一个日期列,尽管它是多余的,但行名也是日期。
然后我使用melt命令并得到以下输出:
melted<- melt(plottable,id = "Date")
Date variable value
1 2016-05-02 bfolioTotalInvNZ 100
2 2016-05-03 bfolioTotalInvNZ 100.396798622275
3 2016-05-04 bfolioTotalInvNZ 100.289579106988
4 2016-05-09 bfolioTotalInvNZ 99.9190144893418
5 2016-05-10 bfolioTotalInvNZ 100.439784570027
6 2016-05-11 bfolioTotalInvNZ 100.124973416093
然后使用以下代码绘制它们:
ggplot(melted,aes(x = Date,y = value,col = variable)) +
geom_line()
它给了我以下错误: geom_path:每组只包含一个观察。需要调整组吗 审美?
我一直在努力解决这个问题,似乎永远无法解决这个问题。如果有人可以帮助我,我将不胜感激。我只是想将所有这些同时绘制在同一个情节中,我真的不确定是什么地方出了问题。
编辑:如果我添加 group = variables 命令,例如:
ggplot(melted,aes(Date,value)) +
geom_line(aes(colour = variable,group = variable))
我得到以下输出: enter image description here
我不知道为什么,因为值在 50-250 之间,我什至将每个观察的数量减少到 600。
解决方法
因为您当前的 value
是一个字符。将其转换为数字将解决问题。
library(data.table)
library(tidyverse)
melted<- melt(plottable,id = "Date") %>%
mutate(value = as.numeric(value))
ggplot(melted,aes(x = Date,y = value,col = variable)) +
geom_line()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。