平均假設我有一個數據幀,看起來像這樣:ggplot:繪製在x軸上的垃圾箱和y軸
data <- data.frame(y = rnorm(10,0,1), x = runif(10,0,1))
我想要做的是削減x值成箱,如:
data$bins <- cut(data$x,breaks = 4)
然後,我想的方式,x軸是倉(使用ggplot)的結果來繪製,並且y軸是數據$ y的數據點的平均值落入相應的垃圾箱。
預先感謝您
平均假設我有一個數據幀,看起來像這樣:ggplot:繪製在x軸上的垃圾箱和y軸
data <- data.frame(y = rnorm(10,0,1), x = runif(10,0,1))
我想要做的是削減x值成箱,如:
data$bins <- cut(data$x,breaks = 4)
然後,我想的方式,x軸是倉(使用ggplot)的結果來繪製,並且y軸是數據$ y的數據點的平均值落入相應的垃圾箱。
預先感謝您
可以使用stat_summary()
功能。
library(ggplot2)
data <- data.frame(y = rnorm(10,0,1), x = runif(10,0,1))
data$bins <- cut(data$x,breaks = 4)
# Points:
ggplot(data, aes(x = bins, y = y)) +
stat_summary(fun.y = "mean", geom = "point")
# Histogram bars:
ggplot(data, aes(x = bins, y = y)) +
stat_summary(fun.y = "mean", geom = "histogram")
這裏是點的畫面:
由於您的y值的平均值可以小於0,我推薦一個點圖,而不是條形圖。點代表手段。您可以使用qplot或常規ggplot函數。後者更具可定製性。在這個例子中,兩者都產生相同的輸出。
library(ggplot2)
set.seed(7)
data <- data.frame(y = rnorm(10,0,1), x = runif(10,0,1))
data$bins <- cut(data$x,breaks = 4, dig.lab = 2)
qplot(bins, y, data = data, stat="summary", fun.y = "mean")
ggplot(data, aes(x = factor(bins), y = y)) +
stat_summary(fun.y = mean, geom = "point")
您還可以添加錯誤欄。在這種情況下,它們顯示組平均值+/- 1.96倍的組標準偏差。組平均值和SD可以使用tapply獲得。
m <- tapply(data$y, data$bins, mean)
sd <- tapply(data$y, data$bins, sd)
df <- data.frame(mean.y = m, sd = sd, bin = names(m))
ggplot(df, aes(x = bin, y = mean.y,
ymin = mean.y - 1.96*sd,
ymax = mean.y + 1.96*sd)) +
geom_errorbar() + geom_point(size = 3)
我看到你的問題問切值,然後繪製平均值。使用象''tmp < - hist(data.x,breaks =「Sturges」)這樣的'hist'函數中的標準算法來尋找箱子,然後使用類似'idxs = findInterval(data.x) ,tmp $ break)'。然後使用ggplot中的x座標索引:'tmp $ mids [idxs]'和使用@christoph建議的解決方案的y平均值。 – Sid