R 从zoo对象使用ggplot2绘制多行图形

R 从zoo对象使用ggplot2绘制多行图形,r,graph,ggplot2,time-series,timeserieschart,R,Graph,Ggplot2,Time Series,Timeserieschart,全部 我在stackoverflow上读了几条消息,查阅了zoo和ggplot2的文档,但没有找到任何合适的答案 假设我有一个名为“数据”的zoo对象。平面文件中的原始数据如下所示: Date,Quote1,Quote2,Quote3,Quote4,Quote5 18/07/2008,42.36,44.53,28.4302,44.3,42 21/07/2008,43.14,44.87,28.6186,44.83,43.27 22/07/2008,43.26,44.85,28.6056,44.86

全部

我在stackoverflow上读了几条消息,查阅了zoo和ggplot2的文档,但没有找到任何合适的答案

假设我有一个名为“数据”的zoo对象。平面文件中的原始数据如下所示:

Date,Quote1,Quote2,Quote3,Quote4,Quote5
18/07/2008,42.36,44.53,28.4302,44.3,42
21/07/2008,43.14,44.87,28.6186,44.83,43.27
22/07/2008,43.26,44.85,28.6056,44.86,42.84
23/07/2008,44.74,45.61,29.7558,45.69,#N/A
24/07/2008,43.99,45.14,29.2944,45.19,#N/A
25/07/2008,43.18,45.33,29.4569,45.46,43.65
28/07/2008,43.45,44.72,28.5016,44.89,43.31
29/07/2008,43.49,44.8,28.1247,44.88,42.85
30/07/2008,44.55,45.54,28.0727,45.58,43.67
31/07/2008,43.36,45.5,27.9818,45.63,43.91
01/08/2008,43.34,44.75,28.0792,44.69,43.04
现在,我想在单线图上绘制这五种金融产品的时间序列,以便比较它们的演变

我希望使用ggplot2


谁能给我一些提示吗?

这里有一种方法:

df <- read.csv(text = "Date,Quote1,Quote2,Quote3,Quote4,Quote5
18/07/2008,42.36,44.53,28.4302,44.3,42
21/07/2008,43.14,44.87,28.6186,44.83,43.27
22/07/2008,43.26,44.85,28.6056,44.86,42.84
23/07/2008,44.74,45.61,29.7558,45.69,#N/A
24/07/2008,43.99,45.14,29.2944,45.19,#N/A
25/07/2008,43.18,45.33,29.4569,45.46,43.65
28/07/2008,43.45,44.72,28.5016,44.89,43.31
29/07/2008,43.49,44.8,28.1247,44.88,42.85
30/07/2008,44.55,45.54,28.0727,45.58,43.67
31/07/2008,43.36,45.5,27.9818,45.63,43.91
01/08/2008,43.34,44.75,28.0792,44.69,43.04", na.string = "#N/A")

df$Date <- strptime(df$Date, format = "%d/%m/%Y")
将对象转换为
ggplot2
的数据帧:

df_new <- data.frame(value = as.vector(dat),
                     time = time(dat),
                     quote = rep(names(dat), each = nrow(dat)))

这里有另一个稍微不同的方法,使用重塑的熔体

# Read your data and format date (as proposed by Sven)

df <- read.csv(text = "Date,Quote1,Quote2,Quote3,Quote4,Quote5
18/07/2008,42.36,44.53,28.4302,44.3,42
21/07/2008,43.14,44.87,28.6186,44.83,43.27
22/07/2008,43.26,44.85,28.6056,44.86,42.84
23/07/2008,44.74,45.61,29.7558,45.69,#N/A
24/07/2008,43.99,45.14,29.2944,45.19,#N/A
25/07/2008,43.18,45.33,29.4569,45.46,43.65
28/07/2008,43.45,44.72,28.5016,44.89,43.31
29/07/2008,43.49,44.8,28.1247,44.88,42.85
30/07/2008,44.55,45.54,28.0727,45.58,43.67
31/07/2008,43.36,45.5,27.9818,45.63,43.91
01/08/2008,43.34,44.75,28.0792,44.69,43.04", na.string = "#N/A")

df$Date <- strptime(df$Date, format = "%d/%m/%Y")

library(reshape)
# reshape your data with melt
melted <- melt(df[-1])
# add dates
melted2 <- cbind(df$Date,melted)
# plot with ggplot
ggplot(melted2,aes(y = value, x = melted2[,1], color = variable)) + geom_line()
#读取数据并格式化日期(由Sven提议)

df如果
数据
是您的zoo对象,请尝试此操作(有关更多信息,请参阅
?autoplot.zoo
):


查看melt(从重塑)以准备数据,然后使用ggplot2绘图应该很简单。看,这很有效。谢谢现在,我想要日期格式:mm/yyyy。然后我添加了+scale_x_date(format=“%m/%Y”),但这不起作用。我的意思是,日期仍保持原始数据源中的格式,请尝试以下方法:
library(scales);p+比例x日期(标签=日期格式(“%m/%Y”)
ah谢谢。我的秤包没有装。ylab和xlab函数是否适用于ggplot2图形?啊,我的操作如下:autoplot(p,facet=NULL,main=“累计每日收益”,xlab=NA,ylab=“%”+缩放x_日期(标签=日期格式(“%Y”),xlab(“”)+缩放Y_连续(ylab(“%”)。我不想给x轴取任何名字,然后我把它改成“”,但可能有更好的方法
library(ggplot2)
ggplot(df_new, aes(y = value, x = time, colour = quote)) + geom_line()
# Read your data and format date (as proposed by Sven)

df <- read.csv(text = "Date,Quote1,Quote2,Quote3,Quote4,Quote5
18/07/2008,42.36,44.53,28.4302,44.3,42
21/07/2008,43.14,44.87,28.6186,44.83,43.27
22/07/2008,43.26,44.85,28.6056,44.86,42.84
23/07/2008,44.74,45.61,29.7558,45.69,#N/A
24/07/2008,43.99,45.14,29.2944,45.19,#N/A
25/07/2008,43.18,45.33,29.4569,45.46,43.65
28/07/2008,43.45,44.72,28.5016,44.89,43.31
29/07/2008,43.49,44.8,28.1247,44.88,42.85
30/07/2008,44.55,45.54,28.0727,45.58,43.67
31/07/2008,43.36,45.5,27.9818,45.63,43.91
01/08/2008,43.34,44.75,28.0792,44.69,43.04", na.string = "#N/A")

df$Date <- strptime(df$Date, format = "%d/%m/%Y")

library(reshape)
# reshape your data with melt
melted <- melt(df[-1])
# add dates
melted2 <- cbind(df$Date,melted)
# plot with ggplot
ggplot(melted2,aes(y = value, x = melted2[,1], color = variable)) + geom_line()
p <- autoplot(data, facet = NULL)
p
p + aes(linetype = NULL)