我有CSV格式的包含十个站的时间序列数据。每个站由三个参数(SPEI3、SPEI6和SPEI12)组成。每个SPEI类别都有自己的开始日期。两个站点的样本数据如下:;
date,SPEI,Bulongwa,Igembe
3/1/1990,SPEI3,-0.633666276,-1.091342548
4/1/1990,SPEI3,-1.154270937,-1.260999014
5/1/1990,SPEI3,-1.730380247,-1.918347545
6/1/1990,SPEI3,-1.554194439,-1.669196002
7/1/1990,SPEI3,-0.585667705,-0.530214816
8/1/1990,SPEI3,-0.174442879,0.058721878
9/1/1990,SPEI3,1.177516783,0.488334655
10/1/1990,SPEI3,0.337872023,0.321737439
11/1/1990,SPEI3,-0.862164636,-0.237407495
12/1/1990,SPEI3,-1.022895024,-0.928489143
6/1/1990,SPEI6,-1.397632538,-0.722279406
7/1/1990,SPEI6,-1.338037747,-0.663393368
8/1/1990,SPEI6,-1.773644884,-0.835592437
9/1/1990,SPEI6,-1.469993994,-0.731273761
10/1/1990,SPEI6,-0.640571906,-0.237666955
11/1/1990,SPEI6,-0.963494314,-0.222447386
12/1/1990,SPEI6,-0.963266132,-0.50631387
12/1/1990,SPEI12,-1.743275704,-0.704998147
1/1/1991,SPEI12,-1.398853355,-0.668119127
2/1/1991,SPEI12,-1.630408685,-0.781252647
3/1/1991,SPEI12,-1.451362535,-0.716740124
4/1/1991,SPEI12,-1.162635355,-0.554554904
5/1/1991,SPEI12,-0.723093595,-0.513940083
6/1/1991,SPEI12,-0.710841553,-0.511117277
7/1/1991,SPEI12,-0.682616494,-0.517770976
8/1/1991,SPEI12,-0.70090681,-0.5207414
9/1/1991,SPEI12,-0.748674903,-0.532204739
10/1/1991,SPEI12,-0.595583026,-0.502605309
11/1/1991,SPEI12,-0.383636489,-0.429787626
12/1/1991,SPEI12,0.146175789,-0.197058223
完整的数据集可以在以下链接中找到。
SPEI Data
使用以下代码,使用单个站绘图效果很好。
Code:
# Libraries
library(ggplot2)
library(ggpubr)
#Loading Data
df <- read.csv("SPEI.csv")
#Create Rdate format
dates <- as.Date(df$date, format = '%m/%d/%Y')
df$date <- dates
# Plot
ggplot(df, aes(x = date, y = Bulongwa, fill=SPEI))+
geom_area(position = 'identity')+
theme_pubclean()+
scale_fill_manual(values = c("#003333","#00CCFF", "#996600"), name = NULL)+
scale_x_date(date_breaks = "2 years",date_labels = "%Y", expand = c(0,0)) +
theme(axis.text.x = element_text(angle=90, vjust=.5))+
labs(x = "Date: [Years]", y = 'SPEI-Drought / Wetness Index')+
theme(plot.title = element_text(hjust = 0.5, size=14, face= "bold", colour= "black"))+
theme(plot.title = element_text(hjust = 0.5), legend.position = 'bottom')+
theme(strip.text = element_text(size =11.5, face="bold"),
legend.title = element_text(colour = "black", size =12, face="bold"),
legend.text = element_text(colour = "black", size =12, face="bold"),
axis.title.y = element_text(colour = "black", size =14, face="bold"),
axis.text.y = element_text(colour = "black", size =14),
axis.title.x = element_text(colour = "black", size =12, face="bold"),
axis.text.x = element_text(colour = "black", size =15))+
theme(panel.spacing.x = unit(1, "lines"),
panel.border = element_rect(fill = 'transparent', colour = "#BFD5E3"))
结果:
但是,如果我重塑数据并使用
facet_wrap(~variable)
产出一团糟。修改后的代码和结果如下。
Code:
# Libraries
library(ggplot2)
library(reshape)
library(ggpubr)
#Loading Data
df <- read.csv("SPEI.csv")
#Create Rdate format
dates <- as.Date(df$date, format = '%m/%d/%Y')
dt = melt(df, id.vars = c("SPEI","date"))
dt$date <- dates
head(dt)
# Plot
ggplot(dt, aes(x = date, y = value, fill=SPEI))+
geom_area(position = 'identity')+
theme_pubclean()+
scale_fill_manual(values = c("#003333","#00CCFF", "#996600"), name = NULL)+
scale_x_date(date_breaks = "2 years",date_labels = "%Y", expand = c(0,0)) +
theme(axis.text.x = element_text(angle=90, vjust=.5))+
facet_wrap(~variable)+
labs(x = "Date: [Years]", y = 'SPEI-Drought / Wetness Index')+
theme(plot.title = element_text(hjust = 0.5, size=14, face= "bold", colour= "black"))+
theme(plot.title = element_text(hjust = 0.5), legend.position = 'bottom')+
theme(strip.text = element_text(size =11.5, face="bold"),
legend.title = element_text(colour = "black", size =12, face="bold"),
legend.text = element_text(colour = "black", size =12, face="bold"),
axis.title.y = element_text(colour = "black", size =14, face="bold"),
axis.text.y = element_text(colour = "black", size =14),
axis.title.x = element_text(colour = "black", size =12, face="bold"),
axis.text.x = element_text(colour = "black", size =15))+
theme(panel.spacing.x = unit(1, "lines"),
panel.border = element_rect(fill = 'transparent', colour = "#BFD5E3"))
结果:
我想要的输出如下:
对此有解决方法吗?