无法为情节添加系列

时间:2017-06-30 23:50:51

标签: r plot dplyr lines zoo

我需要帮助制作一个非常简单的情节。它只是一个折线图,其中包含一组不同的价格(它们都是时间序列,每条商品的一条线.X =价格,Y =时间)。所以我有一个遵循以下格式的数据集:

#Date    prices1   prices2

日期均遵循YYYY-MM-DD格式,两个价格列为数字。我检查了所有三列的类,以确保它们应该是它们应该是什么("日期","数字"和#34;数字"分别)。我觉得应该提一些事情:

  • 通过Quandl()调用检索数据,初始数据帧的长度不同。因此,我不得不使用full_join加入他们。我仍然检查了最终数据框中每列的class(),它们是正确的。

  • price1列的长度为91,而price2列的长度为100.我最初认为这是问题的根源。但是在设置df$price2[92:100] = NA之后,我仍然遇到同样的问题(我可以分别绘制每条线,但是当我使用lines()函数时都不会显示)。

  • 此外,我制作了一个单独的脚本,其中我创建了一个三列数据框,其中我有100列,NA为#{1}}的前十个值,NA' s col1等的第11至第20个值

现在,我没有让它们成为时间序列对象,并尝试将它们简单地绘制为普通数据帧。我可以在他们自己的上绘制两者,但我不能为我的生活绘制一个并使用lines()函数为另一个。我能错过什么?如果问题是col2,那么为什么我的测试数据出来时,我无法使用Quandl数据进行双线图?

由于问题的情况,我决定分享Quandl脚本和测试脚本。

NA

这也是我在我似乎没有问题的地方制作的测试脚本。

#Original Script with issues
#Retrieving Data1
library(dplyr)
library(zoo)
library("Quandl")

data.1 = Quandl("JODI/OIL_TCPRKL_VEN")
#Putting data in chronological order

      #not in order
      print(data.1$Date[1])
      print(data.1$Date[length(data.1$Date)])

data.1 = data.frame(
  data.1$Date[length(data.1$Date):1],
  data.1$Value[length(data.1$Value):1]
)
names(data.1) = c("Date", "Value1")

      #Now in order
      print(data.1$Date[1])
      print(data.1$Date[length(data.1$Date)])





#Retrieving data2
data.2 = Quandl("JODI/OIL_TCPRKB_IRQ")

      #not in order
      print(data.2$Date[1])
      print(data.2$Date[length(data.2$Date)])

data.2 = data.frame(
  data.2$Date[length(data.2$Date):1],
  data.2$Value[length(data.2$Value):1]
)
names(data.2) = c("Date", "Value2")

      #now in order 
      print(data.2$Date[1])
      print(data.2$Date[length(data.2$Date)])


#join the data
data.join = data.frame(full_join(data.1, data.2))


plot(data.join$Date, data.join$Value1,
     col = "blue",
     main = "Should have both lines",
     type = "l",
     sub = "only one of them shows up though. Why?",
     xlab = "Date",
     ylab = "Values")
lines(data.join$Value2)
#plot only has one line. Why??

我真的想要理解为什么第一个脚本不起作用,而我的第二个脚本不起作用。任何帮助或提示将不胜感激。 Why doesn't it work?

1 个答案:

答案 0 :(得分:0)

你的问题是y范围。

使用您的样本数据:

df = structure(list(Date = structure(c(14275, 14303, 14334, 14364, 14395,
 14425), class = "Date"), Value1 = c(14347.197, 12856.3706, 14623.1995,
 13998.8553, 14381.6974, 13688.8295), Value2 = c(68603, 62440, 73439,
 69930, 72850, 73500)), .Names = c("Date", "Value1", "Value2"), row.names = 
 c(NA, 6L), class = "data.frame")

我们可以看到范围没有接近重叠,所以你需要预先定义情节的限制:

df_range = range(c(df$Value1, df$Value2), na.rm = T)
plot(df$Date, df$Value1, type = "l", ylim = df_range))
lines(df$Date, df$Value2, col = "firebrick4")

enter image description here