我有以下时间序列数据(此处仅给出samlpe):
df
Month repo revrepo bankrate CRR Callrate WPI GDP FED width nse usd
1 2001-04-01 9.00 6.75 7.0 8.00 7.49 5.41 4.6 4.50 225 1125.2 46.79
2 2001-05-01 8.75 6.50 7.0 7.50 8.03 5.60 4.6 4.00 225 1167.9 46.92
3 2001-06-01 8.50 6.50 7.0 7.50 7.24 5.30 4.6 3.75 200 1107.9 47.00
4 2001-07-01 8.50 6.50 7.0 7.50 7.19 5.23 5.3 3.75 200 1072.8 47.14
5 2001-08-01 8.50 6.50 7.0 7.50 6.94 5.41 5.3 3.50 200 1053.8 47.13
6 2001-09-01 8.50 6.50 7.0 7.50 7.30 4.52 5.3 3.00 200 913.9 47.65
7 2001-10-01 8.50 6.50 6.5 7.50 7.40 2.91 6.8 2.50 200 971.9 48.02
8 2001-11-01 8.50 6.50 6.5 5.75 6.97 2.59 6.8 2.00 200 1067.2 48.00
9 2001-12-01 8.50 6.50 6.5 5.50 7.08 2.08 6.8 1.75 200 1059.0 47.92
10 2002-01-01 8.50 6.50 6.5 5.50 6.63 1.51 6.4 1.75 200 1075.4 48.32
11 2002-02-01 8.50 6.50 6.5 5.50 6.73 1.39 6.4 1.75 200 1142.0 48.69
12 2002-03-01 8.00 6.00 6.5 5.50 6.97 1.76 6.4 1.75 200 1129.5 48.74
13 2002-04-01 8.00 6.00 6.5 5.50 6.58 1.50 5.1 1.75 200 1084.5 48.92
14 2002-05-01 8.00 6.00 6.5 5.50 6.90 1.56 5.1 1.75 200 1028.8 49.00
15 2002-06-01 8.00 5.75 6.5 5.00 6.04 2.43 5.1 1.75 225 1057.8 48.97
我试图使用ggplot绘制每个变量,如下所示(仅显示第一个变量图):
ts_data<-df
ts_data$Month<-as.Date(ts_data$Month,"%Y-%m-%d")
library(ggplot2)
library(ggthemes)
p <- ggplot() +
geom_line(data = ts_data, aes(x=Month, y=repo, color = "repo"),size=1.45,colour="#0072B2") +ylim(0,12) +labs(color="") + xlab('\nYears') + ylab('Repo Rates (%)\n') + scale_x_date(date_breaks = "2 year",date_labels = "%Y")+ggtitle("Repo Rate movement from 2001 April to 2016 April") + theme(axis.text.x=element_text(size=12, color = "black")) + theme_stata()
p
我可以类似地绘制所有其他剩余变量,但为了有效,可以采用迭代方法。如何使用绘图标题迭代绘制所有变量,以及yaxis标题随每次迭代而变化。提前谢谢。
答案 0 :(得分:1)
我们可以循环遍历列并以PDF格式输出,每列绘制为新页面:
# if Month column is not date class then convert to date
# df1$Month <- as.Date(df1$Month, "%Y-%m-%d")
pdf("myPlots.pdf")
for(i in tail(colnames(df1), -1)){
gg <- ggplot(df1, aes_string(x = "Month", y = i)) +
geom_line() + ggtitle(paste("My title for", i))
print(gg)}
dev.off()
或者我们可以从宽到长的格式重塑,然后使用 facet _
library(tidyr)
plotDat <- gather(df1, key = "Group", value = "Y", -Month)
ggplot(plotDat, aes(x = Month, y = Y)) +
geom_line() +
facet_grid(Group ~ ., scales = "free_y")
答案 1 :(得分:0)
假设您从csv文件中读取:
library(lubridate)
library(reshape2)
library(dply)
# If your 'Month' variable is already of Date class ignore the following line
df$Month<-ymd(df$Month)
dfmelt=melt(df,id.vars="Month")
ggplot(dfmelt,aes(x=Month,y=value,col=variable))+geom_line()
答案 2 :(得分:0)
根据@ zx8754给出的答案,这是具有所需主题的最终代码:
for(i in tail(colnames(ts_data), -1)){
gg <- ggplot(ts_data, aes_string(x = "Month", y = i)) +
geom_line(size=1.45,colour="#0072B2") + scale_x_date(date_breaks = "2 year",date_labels = "%Y")+ xlab('\nYear') + ylab(paste(i,ifelse(i %in% c("repo", "revrepo", "bankrate","CRR","Callrate","WPI", "GDP","FED"), "(%)", ifelse(i %in% c("width"),"(bps)",ifelse(i %in% c("nse"),"(index points)","(Rs.)"))),'\n')) + ggtitle(paste(i,"Trend from 2001 April to 2016 April\n")) + theme_stata()
print(gg)
}
Thanx很多。由于有许多系列,Facet网格压缩图形,否则这也是一个很好的解决方案。也许在这里可以使用某种刻面包装。大量学习!