【发布时间】:2020-05-11 20:42:45
【问题描述】:
我正在使用fdc 中的hydroTSM package。我有三个data.frame,我想使用ggplot 的facet_wrap 功能构建data.frame 的流动持续时间曲线(FDC),以便在three rows 和one column 中拥有plots。以下将为DF1 生成FDC curves。
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 将三个图强制在一个数字上。我不仅没有做到这一点,而且它不是首选方法。我想使用ggplot 的facet_wrap 选项。实际上,使用DF1 数据错误地绘制了该图。我正在寻找类似下面的东西:
更新:这是基于@Jon Spring 的建议。
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())
【问题讨论】:
-
为了使用 faceting,ggplot 需要一个列来解释哪一行属于哪个 facet。你知道吗?
-
@Hydro:您可以添加
scale_y_log10(labels = scales::comma) + annotation_logticks(sides = 'l') +以使绘图看起来类似于hydroTSM::fdc()函数的输出。
标签: r ggplot2 probability facet-wrap hydrotsm