如何自定义将垂直线添加到 ggplot facet 函数?

Posted

技术标签:

【中文标题】如何自定义将垂直线添加到 ggplot facet 函数?【英文标题】:How to custom add vertical lines to ggplot facet function? 【发布时间】:2021-01-21 11:59:40 【问题描述】:

我有一个数据集,其中每个物种都与另一个物种的一定密度(数字)和类型(数字)混合。我想在 ggplot 中的每个 facet_grid 面板中添加两种类型的垂直线: (a) 一条划分密度/类型的固定线路。例如1000/1 = 1000, 1000/6 = 166.7, 10000/1 = 10000, 10000/6 = 1666.7

(b) 叠加在直方图上的每个处理的自举平均 AND 置信区间。 我尝试使用 geom_vline 添加平均值,但它似乎不正确。看起来所有的手段都是一样的

set.seed(111)
count <- rbinom(500,100,0.1) 
species <- rep(c("A","B"),time = 250)
density <- rep(c("1000","10000","1000","10000"),time = 125)
type <- rep(c("1","1","6","6"),time = 125)
df <- data.frame(species, density, type, count) # I feel too naiive, but I'm not able to get all the treatments filled. Gah.

ggplot(df, aes(x= count, colour = species, fill = species)) + 
   geom_histogram(position="identity", alpha=0.5) + 
   theme_bw() + ylab("Frequency") + 
   facet_grid(species ~ type + density) + 
   theme(panel.grid.major = element_blank(),
         panel.grid.minor = element_blank()) +
   theme(legend.position = "none") + theme(aspect.ratio = 1.75/1) + 
   geom_vline(aes(xintercept=mean(count)),color="blue", linetype="dashed", size=1)

【问题讨论】:

【参考方案1】:

我不确定为什么这是分面的默认行为,但我认为解决方法是将汇总数据传递给geom_vline。一种方式如下(在期末修改你的代码)...

ggplot(df, aes(x= count, colour = species, fill = species)) + 
  geom_histogram(position="identity", alpha=0.5) + 
  theme_bw() + ylab("Frequency") + 
  facet_grid(species ~ type + density) + 
  theme(legend.position = "none") + theme(aspect.ratio = 1.75/1) + 
  geom_vline(data = function(x) x %>% 
               group_by(species, type, density) %>% 
               summarise(meancount = mean(count)),
             aes(xintercept=meancount),color="blue", linetype="dashed", size=1)

(我已经恢复了网格线,以便您可以看到线条确实移动了一点!)

【讨论】:

以上是关于如何自定义将垂直线添加到 ggplot facet 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用不同的几何图形将边际总计添加到 ggplot2 facet_grid 图

R语言ggplot2可视化分面图(faceting): 堆叠柱状图的分面图编写自定义函数在分面图的左侧添加图例信息(legend)

R语言ggplot2可视化分面图(faceting)编写自定义函数将生成的分面图分裂成多个子图并按照索引读取对应的可视化图像:Split facet plot into list of plots

R语言将字符串按照一定的格式(format)转化为日期格式ggplot2可视化水平分面图(faceting)自定义X轴的时间标签旋转

R语言ggplot2可视化使用facet_grid构建多个子图(facet面图)并自定义每个子图(facet面图)的文本实战

将“整体”组添加到facet_wrap(ggplot2)