使用ggplot2的多线图

时间:2018-01-17 18:12:47

标签: r ggplot2

我正在尝试模拟多行的ggplot,其工作原理如下:

    set.seed(45)
    df <- data.frame(x=c(1,2,3,4,5,1,2,3,4,5,3,4,5), val=sample(1:100, 13), 
             variable=rep(paste0("category", 1:3), times=c(5,5,3)))
    ggplot(data = df, aes(x=x, y=val)) + geom_line(aes(colour=variable))

Simple example 我可以使用这个简单的示例,但是在更大的数据集上,我遵循相同的步骤,但它无法正常工作。

   ncurrencies = 6
   dates = c(BTC$Date, BCH$Date, LTC$Date, ETH$Date, XRP$Date, XVG$Date)
   opens = c(BTC$Open, BCH$Open, LTC$Open, ETH$Open, XRP$Open, XVG$Open)
   categories = rep(paste0("categories", 1:ncurrencies), 
             times=c(nrow(BTC), nrow(BCH), nrow(LTC), nrow(ETH), nrowXRP), nrow(XVG)))
   df = data.frame(dates, opens, categories)

   # Plot - Not correct.
   ggplot(data=df, aes(x=dates, y=opens)) + 
   geom_line(aes(colour=categories))

Real Data

如您所见,不同的点是离散的,y轴是奇怪的。我猜这是一个菜鸟错误,但我已经绕圈了一段时间。有谁能看到它?

P.S。我不认为我可以在这里上传数据,因为代码太多了。但是,数据框的格式与实践示例的格式相同,并且类别与x和y数据正确匹配。因此我相信这是我定义ggplot的方式 - 我对R来说比较新。

1 个答案:

答案 0 :(得分:1)

谢谢Markus和Jan,是的,你是对的。 df $ opens是一个因素,将其更改为数字解决了问题。

    opens = as.numeric(c(BTC$Open, BCH$Open, LTC$Open, ETH$Open, XRP$Open, XVG$Open))

Correct graph