我需要帮助制作一个非常简单的情节。它只是一个折线图,其中包含一组不同的价格(它们都是时间序列,每条商品的一条线.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?
答案 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")