我想绘制一个 ggplot 散点图,并在其上覆盖 x 轴上均匀间隔的箱内 y 变量的平均值。
到目前为止我所拥有的是这样的:
library(tidyverse)
data(midwest)
ggplot(arrange(midwest,percollege),aes(x=percollege,y=percbelowpoverty))+
geom_point()+
stat_summary_bin(aes(x=percollege,y=percbelowpoverty),
bins=10,fun.y='mean',geom='point',col='red')
Run Code Online (Sandbox Code Playgroud)
这基本上是完美的,除了而不是红点,我想要从垃圾箱的开头延伸到垃圾箱的结尾的水平红线。
我可以模仿我想要的东西
library(tidyverse)
data(midwest)
ggplot(arrange(midwest,percollege),aes(x=percollege,y=percbelowpoverty))+
geom_point()+
stat_summary_bin(aes(x=percollege,y=percbelowpoverty),
bins=10,fun.y='mean',geom='point',col='red',shape="-",size=50)
Run Code Online (Sandbox Code Playgroud)
这使
这正是我想要的,除了
我尝试过的另一种方法是 with geom='bar',fill=NA,如果我能以某种方式让它只显示顶部栏而不显示栏的侧面或底部,这似乎很有希望。
有什么建议吗?pointrange我在将 geom 设置为or linerangeor 方面运气不佳line(前两个我还没有开始工作,最后一个只是用非水平线连接每个点)。老实说,这不是默认行为,有点令人惊讶stat_summary_bin!
谢谢!
小智 3
这应该有效。我认为该rownames_to_column行可能不是必需的,而modify_if参数是必需的,因为该cut函数生成字符串而不是数值。
midwest_sum <- midwest %>%
mutate(coll_bins = cut(percollege, breaks = 10)) %>%
group_by(coll_bins) %>%
summarise(bin_mean = mean(percbelowpoverty)) %>%
rownames_to_column(var = "bin_num") %>%
tidyr::extract(coll_bins, c("min", "max"), "\\((.*),(.*)]") %>%
modify_if(is.character, as.numeric)
ggplot()+
geom_point(data = midwest, aes(x=percollege,y=percbelowpoverty)) +
geom_errorbarh(data = midwest_sum, aes(xmin = min, xmax = max, y = bin_mean),
col = "red", size = 1)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!