我正在使用fdc of hydroTSM package。我有三个data.frame,我希望使用ggplot的facet_wrap功能构造data.frame的流持续时间曲线(FDC),以便在three rows和one column中拥有plots。下面将生成用于FDC curves的DF1。
library(tidyverse)
library(hydroTSM)
library(gridExtra)
DF1 = data.frame(Ob = runif(1000,0,500), A = runif(1000,0,700), B = runif(1000,2,800))
DF2 = data.frame(Ob = runif(1000,0,500), A = runif(1000,0,700), B = runif(1000,2,800))
DF3 = data.frame(Ob = runif(1000,0,500), A = runif(1000,0,700), B = runif(1000,2,800))
fdc(DF1, plot = TRUE)

我试图使用gridExtra package和grid.arrange将这三幅图强制放在一个图形上。我不仅没能做到,而且这也不是首选的方法。我希望使用facet_wrap选项的ggplot。实际上,使用DF1数据绘制的数字是错误的。我想找的东西如下:

更新:这是基于@Jon建议的。
graphics.off()
rm(list = ls())
library(tidyverse)
library(hydroTSM)
library(gridExtra)
DF1 = data.frame(Ob = runif(800,0,500), M1= runif(800,0,700), M2 = runif(800,2,800), df = rep("Upstream", 800))
DF2 = data.frame(Ob = runif(1000,0,500), M1 = runif(1000,0,700), M2 = runif(1000,2,800), df = rep("Midstream", 1000))
DF3 = data.frame(Ob = runif(1000,0,500), M1 = runif(1000,0,700), M2 = runif(1000,2,800), df = rep("Downstream", 1000))
# combine data into one table with id column for the source
bind_rows(DF1, DF2, DF3) %>%
# reshape into longer format
pivot_longer(-df, names_to = "src", values_to = "flow") %>%
arrange(-flow) %>%
group_by(df, src) %>%
mutate(flow_pct = 1 - percent_rank(flow)) %>%
ungroup() %>%
ggplot(aes(flow_pct, flow, color = src)) +
geom_line() +
theme_light() +
facet_wrap(~df, ncol = 1) +
labs(x = "% Time flow equalled or exceeded",
y = "Q, [m3/s]") +
theme(strip.text = element_text(hjust = 0, color = "black"),
strip.background = element_blank())

发布于 2020-01-26 03:29:57
您可以这样做,在ggplot中使用方面:
library(tidyverse)
# combine data into one table with id column for the source
bind_rows(DF1, DF2, DF3, .id = "df") %>%
mutate(df = LETTERS[as.numeric(df)]) %>%
# reshape into longer format
pivot_longer(-df, names_to = "src", values_to = "flow") %>%
arrange(-flow) %>%
group_by(df, src) %>%
mutate(flow_pct = 1 - percent_rank(flow)) %>%
ungroup() %>%
ggplot(aes(flow_pct, flow, color = src)) +
geom_line() +
theme_light() +
facet_wrap(~df, ncol = 1) +
labs(x = "% Time flow equalled or exceeded",
y = "Q, [m3/s]") +
theme(strip.text = element_text(hjust = 0, color = "black"),
strip.background = element_blank())

如果您希望将字母批注放在更左的位置,您可以交替使用patchwork包来堆栈和标记这些情节:
library(tidyverse)
library(patchwork)
flow_plot <- function(df) {
df %>%
pivot_longer(everything(), names_to = "src", values_to = "flow") %>%
arrange(-flow) %>%
group_by(src) %>%
mutate(flow_pct = 1 - percent_rank(flow)) %>%
ungroup() %>%
ggplot(aes(flow_pct, flow, color = src)) +
geom_line() +
theme_light() +
guides(color = guide_legend()) +
labs(x = "% Time flow equalled or exceeded",
y = "Q, [m3/s]") +
theme(legend.position = c(0.85,0.6))
}
flow_plot(DF1) /
flow_plot(DF2) /
flow_plot(DF3) +
plot_annotation(tag_levels = "A")

发布于 2020-01-26 04:15:41
对于示例数据,我们将使用来自EgaEnEstellaQts包的HydroGOF日流量数据。从1961年1月1日至1970年12月31日。创建三年的数据来绘制
library(hydroGOF)
library(gridExtra)
library(tidyverse)
Q1 <- window(EgaEnEstellaQts, start=as.Date('1961-01-01'), end=as.Date('1961-12-31'))
Q2 <- window(EgaEnEstellaQts, start=as.Date('1963-01-01'), end=as.Date('1963-12-31'))
Q3 <- window(EgaEnEstellaQts, start=as.Date('1965-01-01'), end=as.Date('1965-12-31'))
# Because these objects are all the same length, we can put them in one data frame
flow_df <- tibble(Q1 = coredata(Q1), Q2 = coredata(Q2), Q3 = coredata(Q3))
# Add percent ranks which we'll use to plot the fdc
p1 <- flow_df %>%
gather(key = period, value = flow) %>%
group_by(period) %>%
mutate(rank = 1 - percent_rank(flow)) %>%
ggplot(aes(x = rank, y = flow, colour = period)) +
geom_line() +
scale_y_continuous(name = 'Discharge', trans = 'log10') +
scale_x_continuous(name = 'Percentage of time flow is exceeded', breaks = seq(0,1,0.25), labels = c('0', '25%', '50%', '75%', '100%')) +
labs(subtitle = 'A')
#Make the other graphs as required (just place holders here)
p2 <- p1 + labs(subtitle = 'B')
p3 <- p1 + labs(subtitle = 'C')
# Arrange with grid arrange
grid.arrange(p1, p2, p3)https://stackoverflow.com/questions/59914776
复制相似问题