次の形式のデータがあります。
Date Year Month Day Flow
1 1953-10-01 1953 10 1 530
2 1953-10-02 1953 10 2 530
3 1953-10-03 1953 10 3 530
次のようなグラフを作成したいと思います。
ここに私の現在のイメージとコードがあります:
library(ggplot2)
library(plyr)
library(reshape2)
library(scales)
## Read Data
df <- read.csv("Salt River Flow.csv")
## Convert Date column to R-recognized dates
df$Date <- as.Date(df$Date, "%m/%d/%Y")
## Finds Water Years (Oct - Sept)
df$WY <- as.POSIXlt(as.POSIXlt(df$Date)+7948800)$year+1900
## Normalizes Water Years so stats can be applied to just months and days
df$w <- ifelse(month(df$Date) %in% c(10,11,12), 1903, 1904)
##Creates New Date (dat) Column
df$dat <- as.Date(paste(df$w,month(df$Date),day(df$Date), sep = "-"))
## Creates new data frame with summarised data by MonthDay
PlotData <- ddply(df, .(dat), summarise, Min = min(Flow), Tenth = quantile(Flow, p = 0.05), TwentyFifth = quantile(Flow, p = 0.25), Median = quantile(Flow, p = 0.50), Mean = mean(Flow), SeventyFifth = quantile(Flow, p = 0.75), Ninetieth = quantile(Flow, p = 0.90), Max = max(Flow))
## Melts data so it can be plotted with ggplot
m <- melt(PlotData, id="dat")
## Plots
p <- ggplot(m, aes(x = dat)) +
geom_ribbon(aes(min = TwentyFifth, max = Median), data = PlotData, fill = alpha("black", 0.1), color = NA) +
geom_ribbon(aes(min = Median, max = SeventyFifth), data = PlotData, fill = alpha("black", 0.5), color = NA) +
scale_x_date(labels = date_format("%b"), breaks = date_breaks("month"), expand = c(0,0)) +
geom_line(data = subset(m, variable == "Mean"), aes(y = value), size = 1.2) +
theme_bw() +
geom_line(data = subset(m, variable %in% c("Min","Max")), aes(y = value, group = variable)) +
geom_line(data = subset(m, variable %in% c("Ninetieth","Tenth")), aes(y = value, group = variable), linetype = 2) +
labs(x = "Water Year", y = "Flow (cfs)")
p
私は非常に近いですが、私が抱えているいくつかの問題があります。まず、私のコードを改善する方法があれば教えてください。私が遭遇した主な問題は、このグラフを作成するために 2 つのデータフレームが必要だったことです。リボンを作成するには、溶解していないデータフレームが必要でした (と思います)。溶けたデータフレームをリボンに使用する方法をいろいろ試しましたが、見た目の長さに常に問題がありました。
第二に、私は伝説を持つことを知っています - そして私はそれが欲しいです、私は各ライン/リボンの美学に何かを持つ必要がありますが、それを機能させるのに苦労しています. scale_fill_manual が含まれると思います。
第三に、これが可能かどうかはわかりませんが、各月のラベルを目盛りの上ではなく、目盛りの間に入れたいと思います(上の画像のように)。
どんな助けも大歓迎です (特に、より効率的なコードの作成に関して)。
ありがとうございました。