如何使用ggplot2的facet_wrap创建timeseries绘图
这是一个关于的后续问题。在我的上一个问题中,我有一个需要绘制的单位置数据集,但是,在我目前的情况下,我有多个位置(总共11个)的数据集,需要在一个图形中绘制。我尝试复制相同的代码,只做了少量调整,但是,代码没有生成正确的绘图。此外,我没有看到日期在x轴上中断。任何帮助都将不胜感激如何使用ggplot2的facet_wrap创建timeseries绘图,r,ggplot2,plot,timeserieschart,geom-area,R,Ggplot2,Plot,Timeserieschart,Geom Area,这是一个关于的后续问题。在我的上一个问题中,我有一个需要绘制的单位置数据集,但是,在我目前的情况下,我有多个位置(总共11个)的数据集,需要在一个图形中绘制。我尝试复制相同的代码,只做了少量调整,但是,代码没有生成正确的绘图。此外,我没有看到日期在x轴上中断。任何帮助都将不胜感激 library(SPEI) library(tidyverse) library(zoo) data("balance") SPEI_12=spei(balance,12) SpeiData=SPEI_12$fitt
library(SPEI)
library(tidyverse)
library(zoo)
data("balance")
SPEI_12=spei(balance,12)
SpeiData=SPEI_12$fitted
myDate=as.data.frame(seq(as.Date("1901-01-01"), to=as.Date("2008-12-31"),by="months"))
names(myDate)= "Dates"
myDate$year=as.numeric(format(myDate$Dates, "%Y"))
myDate$month=as.numeric(format(myDate$Dates, "%m"))
myDate=myDate[,-1]
newDates = as.character(paste(month.abb[myDate$month], myDate$year, sep = "_" ))
DataWithDate = data.frame(newDates,SpeiData)
df_spei12 = melt(DataWithDate, id.vars = "newDates" )
SPEI12 = df_spei12 %>%
na.omit() %>%
mutate(sign = ifelse(value >= 0, "pos", "neg"))
SPEI12 = SPEI12%>%
spread(sign,value) %>%
replace(is.na(.), 0)
ggplot(SPEI12) +
geom_area(aes(x = newDates, y = pos), col = "blue") +
geom_area(aes(x = newDates, y = neg), col = "red") +
facet_wrap(~variable)+
scale_y_continuous(limits = c(-2.5, 2.5), breaks = -2.5:2.5) +
scale_x_discrete(breaks=c(1901,1925,1950,1975,2000,2008))+
ylab("SPEI") + ggtitle("12-Month SPEI") +
theme_bw() + theme(plot.title = element_text(hjust = 0.5, size = 16, face = "bold"))+
theme(axis.text = element_text(size=12, colour = "black"), axis.title = element_text(size = 12,face = "bold"))
下面是代码生成的内容—它生成的不是面积图,而是条形图。
您使用的是
scale\u x\u discrete()
,但x轴上的变量newDates
似乎是一个字符。这可以解释为什么x轴上什么都不打印
如果将新日期转换为数字(如您在注释中所建议的)
SPEI12$newDates=as.numeric(as.character(gsub(“.*”,“”,SPEI12$newDates)))
使用scale\u x\u continuous()
而不是discrete,可以得到以下结果:
您使用的是
scale\u x\u discrete()
,但x轴上的变量newDates
似乎是一个字符。这可以解释为什么x轴上什么都不打印
如果将新日期转换为数字(如您在注释中所建议的)
SPEI12$newDates=as.numeric(as.character(gsub(“.*”,“”,SPEI12$newDates)))
使用scale\u x\u continuous()
而不是discrete,可以得到以下结果:
对于
geom\u区域
我在填充图时返回了一个错误(叠加),因此我使用了geom\u条
library(SPEI)
library(tidyverse)
library(zoo)
library(reshape2)
library(scales)
data("balance")
SPEI_12=spei(balance,12)
SpeiData=SPEI_12$fitted
myDate=as.data.frame(seq(as.Date("1901-01-01"), to=as.Date("2008-12-31"),by="months"))
names(myDate)= "Dates"
myDate$year=as.numeric(format(myDate$Dates, "%Y"))
myDate$month=as.numeric(format(myDate$Dates, "%m"))
myDate=myDate[,-1]
newDates = as.character(paste(month.abb[myDate$month], myDate$year, sep = "_" ))
DataWithDate = data.frame(newDates,SpeiData)
df_spei12 = melt(DataWithDate, id.vars = "newDates" )
SPEI12 = df_spei12 %>%
na.omit() %>%
mutate(sign = ifelse(value >= 0, "pos", "neg"))
###
SPEI12_md <- SPEI12 %>%
dplyr::mutate(Date = lubridate::parse_date_time(newDates, "m_y"),
Date = lubridate::ymd(Date),
variable = as.factor(variable))
levels(SPEI12_md$variable) <- c("Indore", "Kimberley", "Albuquerque", "Valencia",
"Viena", " Abashiri", "Tampa", "São Paulo",
"Lahore", "Punta Arenas", "Helsinki")
v <- 0.1 # 0.1 it is a gap
v1 <- min(SPEI12_md$value) - v
v2 <- max(SPEI12_md$value) + v
vv <- signif(max(abs(v1), abs(v2)), 2)
ggplot2::ggplot(SPEI12_md) +
geom_bar(aes(x = Date, y = value, col = sign, fill = sign),
show.legend = F, stat = "identity") +
scale_color_manual(values = c("pos" = "darkblue", "neg" = "red")) +
scale_fill_manual(values = c("pos" = "darkblue", "neg" = "red")) +
facet_wrap(~variable) +
scale_x_date(date_breaks = "10 years",
labels = scales::date_format("%Y-%m")) + #
scale_y_continuous(limits = c(-vv, vv), breaks = c(seq(-vv-v, 0, length.out = 3),
seq(0, vv+v, length.out = 3))) +
ylab("SPEI") + ggtitle("12-Month SPEI") +
theme_bw() + theme(plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
axis.text = element_text(size=12, colour = "black"),
axis.title = element_text(size = 12,face = "bold"),
axis.text.x = element_text(angle = 90, size = 10))
库(SPEI)
图书馆(tidyverse)
图书馆(动物园)
图书馆(E2)
图书馆(比例尺)
数据(“余额”)
SPEI_12=SPEI(余额,12)
SpeiData=SPEI_12$已安装
myDate=as.data.frame(seq(as.Date(“1901-01-01”),to=as.Date(“2008-12-31”),by=“months”))
姓名(myDate)=“日期”
myDate$year=as.numeric(格式为myDate$Dates,“%Y”))
myDate$month=as.numeric(格式为myDate$Dates,“%m”))
myDate=myDate[,-1]
newDates=as.character(粘贴(month.abb[myDate$month],myDate$year,sep=“”))
DataWithDate=data.frame(newDates,SpeiData)
df_spei12=melt(DataWithDate,id.vars=“newDates”)
SPEI12=df_SPEI12%>%
na.省略()%>%
变异(符号=ifelse(值>=0,“pos”,“neg”))
###
SPEI12_md%
dplyr::mutate(Date=lubridate::parse_Date_time(newDates,“m_y”),
日期=润滑脂::ymd(日期),
变量=as.factor(变量))
水平(SPEI12_md$变量)与geom_区域
我在填充图时返回一个错误(叠加),因此我使用geom_条
library(SPEI)
library(tidyverse)
library(zoo)
library(reshape2)
library(scales)
data("balance")
SPEI_12=spei(balance,12)
SpeiData=SPEI_12$fitted
myDate=as.data.frame(seq(as.Date("1901-01-01"), to=as.Date("2008-12-31"),by="months"))
names(myDate)= "Dates"
myDate$year=as.numeric(format(myDate$Dates, "%Y"))
myDate$month=as.numeric(format(myDate$Dates, "%m"))
myDate=myDate[,-1]
newDates = as.character(paste(month.abb[myDate$month], myDate$year, sep = "_" ))
DataWithDate = data.frame(newDates,SpeiData)
df_spei12 = melt(DataWithDate, id.vars = "newDates" )
SPEI12 = df_spei12 %>%
na.omit() %>%
mutate(sign = ifelse(value >= 0, "pos", "neg"))
###
SPEI12_md <- SPEI12 %>%
dplyr::mutate(Date = lubridate::parse_date_time(newDates, "m_y"),
Date = lubridate::ymd(Date),
variable = as.factor(variable))
levels(SPEI12_md$variable) <- c("Indore", "Kimberley", "Albuquerque", "Valencia",
"Viena", " Abashiri", "Tampa", "São Paulo",
"Lahore", "Punta Arenas", "Helsinki")
v <- 0.1 # 0.1 it is a gap
v1 <- min(SPEI12_md$value) - v
v2 <- max(SPEI12_md$value) + v
vv <- signif(max(abs(v1), abs(v2)), 2)
ggplot2::ggplot(SPEI12_md) +
geom_bar(aes(x = Date, y = value, col = sign, fill = sign),
show.legend = F, stat = "identity") +
scale_color_manual(values = c("pos" = "darkblue", "neg" = "red")) +
scale_fill_manual(values = c("pos" = "darkblue", "neg" = "red")) +
facet_wrap(~variable) +
scale_x_date(date_breaks = "10 years",
labels = scales::date_format("%Y-%m")) + #
scale_y_continuous(limits = c(-vv, vv), breaks = c(seq(-vv-v, 0, length.out = 3),
seq(0, vv+v, length.out = 3))) +
ylab("SPEI") + ggtitle("12-Month SPEI") +
theme_bw() + theme(plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
axis.text = element_text(size=12, colour = "black"),
axis.title = element_text(size = 12,face = "bold"),
axis.text.x = element_text(angle = 90, size = 10))
库(SPEI)
图书馆(tidyverse)
图书馆(动物园)
图书馆(E2)
图书馆(比例尺)
数据(“余额”)
SPEI_12=SPEI(余额,12)
SpeiData=SPEI_12$已安装
myDate=as.data.frame(seq(as.Date(“1901-01-01”),to=as.Date(“2008-12-31”),by=“months”))
姓名(myDate)=“日期”
myDate$year=as.numeric(格式为myDate$Dates,“%Y”))
myDate$month=as.numeric(格式为myDate$Dates,“%m”))
myDate=myDate[,-1]
newDates=as.character(粘贴(month.abb[myDate$month],myDate$year,sep=“”))
DataWithDate=data.frame(newDates,SpeiData)
df_spei12=melt(DataWithDate,id.vars=“newDates”)
SPEI12=df_SPEI12%>%
na.省略()%>%
变异(符号=ifelse(值>=0,“pos”,“neg”))
###
SPEI12_md%
dplyr::mutate(Date=lubridate::parse_Date_time(newDates,“m_y”),
日期=润滑脂::ymd(日期),
变量=as.factor(变量))
级别(SPEI12_md$variable)只是为了清楚-我希望日期显示在图的最后一行方法如下?嘿@bbiasi我想联系你,但不知道如何标记你。是的,像那样,但是平均线上下的区域以不同的颜色闭合。你也回答了我前面的问题-谢谢。我已经提供了这个问题的链接。这是相似的,但有多个位置我把一个答案放在一起,我希望它足够好。如果你想联系我,我已经在我的个人资料中提供了一些信息。这项工作是关于什么?谢谢你-我试图复制我们的一个流域相同的工作,以在多个时间尺度assss盆地水分条件。好!如果geom_area
不起作用,我想我必须将其他绘图(在前面的问题中)更改为geom_bar
。只是想澄清一下-我希望日期显示在图形的最后一行,方法如下?嘿@bbiasi我想联系你,但不知道如何标记你。是的,像那样,但是平均线上下的区域以不同的颜色闭合。你也回答了我前面的问题-谢谢。我已经提供了这个问题的链接。这是相似的,但有多个位置我把一个答案放在一起,我希望它足够好。如果你想联系我,我已经在我的个人资料中提供了一些信息。这项工作是关于什么?谢谢你-我试图复制我们的一个流域相同的工作,以在多个时间尺度assss盆地水分条件。好!如果geom_area
不工作,我想我必须将其他绘图(在前面的问题中)更改为geom_bar
。部分原因是我将日期转换为字符,因为在重新排列(df_spei12)数据集时,它会给我带来重复错误。我猜as.numeric(as.character(x))
在这里不起作用。如果日期是我代码中的字符,您将如何打印日期。我将日期格式更改为数字,但仍然没有x轴SPEI12$newDates=as.numeric(as.character(gsub(“.*”,“”,SPEI12$newDates))
)。主要的问题是geom_区域,它产生的是条线而不是区域覆盖。@demarsylvain你知道为什么有些区域是阴影吗?我的情况与此类似,但使用geom_bar
不会发生这种情况。这是因为同一个x轴点有多个点。获得分数(group_by(newDates,variable)%%>%summary_at(vars(neg,pos),funs(sum))
)将解决问题。请毫不犹豫地投票选出有用的答案,并在答案无效时验证答案