[英]How to extract the min/max values in a dataframe to display data as a ribbon?
我在數據框中存儲了幾組數據。 為了解決這個問題,我在下面提供了一種生成此數據幀的方法,但是IRL,我只有merged
數據幀,而沒有中間的數據幀。
x <- seq.POSIXt(from = strptime("1970-01-01 00:00:00", format = "%Y-%m-%d %H:%M:%S"),
to = strptime("1970-01-01 00:05:00", format = "%Y-%m-%d %H:%M:%S"),
by = "10 sec")
x <- rep(x, each = 3)
y <- c()
set.seed(1)
for (i in 1:length(x)) {
y <- c(y, runif(1, min = 0, max = i))
}
my.data.frame1 <- data.frame(x, y, data = as.factor("data1"))
y <- c()
for (i in 1:length(x)) {
y <- c(y, runif(1, min = length(x) - i, max = length(x)))
}
my.data.frame2 <- data.frame(x, y, data = as.factor("data2"))
merged <- rbind(my.data.frame1, my.data.frame2)
ggplot(merged, aes(x, y, color = data)) + geom_point() + geom_line()
因此,對於每種類型的數據(data1和data2)以及x軸上的每個日期值,我都有3個y值。
情節看起來(不好)是這樣的:
我想做的是繪制數據的geom_ribbon
,但我不知道該怎么做。
我首先嘗試每次使用此處說明的aggregate
函數提取最小值和最大值,並構建一個沒有重復x值但無法正常工作的新數據框。
有人可以幫忙嗎?
編輯:
我嘗試使用aggregate
的代碼是以下代碼:
aggregate(y ~ x, data = merged, max)
(相同的分鍾)。 但這並沒有使data1集和data2集區別。 我知道可以子集化,但是我猜可以使用“ by”參數來完成。 只是無法使其工作。
您處在正確的軌道上,需要按data
和x
進行匯總,而不僅僅是x
。
您可以在兩個aggregate
調用中分別按組計算min
和max
,然后合並或同時進行。 對於第二種方法,您將需要一個額外的步驟來將兩個函數的輸出放入單獨的列中。
my.new.df = aggregate(y ~ data + x, data = merged, FUN = function(x) c(min = min(x), max = max(x)))
# Get the min and max as separate columns
my.new.df = as.data.frame(as.list(my.new.df))
ggplot(my.new.df, aes(x, fill = data)) +
geom_ribbon(aes(ymin = y.min, ymax = y.max), alpha = 0.6)
您也可以直接在geom_ribbon
使用stat = "summary"
進行geom_ribbon
而不必為繪圖進行匯總。
ggplot(merged, aes(x, y, fill = data)) +
geom_ribbon(alpha = 0.6, stat = "summary", fun.ymax = max, fun.ymin = min)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.