在一个 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()

enter image description here