ggplot2:添加facet_grid面板意味着文本和hline

jwi*_*720 3 r ggplot2

我有一个看起来像这样的数据框.

> head(df)
  DGene JGene cdr3_len Sum
1 IGHD1 IGHJ1        0  22
2 IGHD1 IGHJ1        1  11
3 IGHD1 IGHJ1        2  16
4 IGHD1 IGHJ1        3  40
5 IGHD1 IGHJ1        4  18
6 IGHD1 IGHJ1        5  30
...
Run Code Online (Sandbox Code Playgroud)

facet_grid非常简单.

ggplot(df,aes(x=cdr3_len,y=Sum)) + geom_line() + xlim(c(1,42)) + facet_grid(JGene~DGene,scales="free_y")
Run Code Online (Sandbox Code Playgroud)

并得到一些看起来像的东西.

在此输入图像描述

我想知道是否有人可以帮我添加每个网格的平均值的hline.或者可能如何在右上角打印每个网格的平均值.

谢谢,

编辑 - 数据框的完整链接

eip*_*i10 7

这是一种cdr3_len通过预先计算所需值来为平均值添加文本和垂直线的方法(根据@jwillis0720的注释):

首先,计算cdr3_len每个面板的平均值,然后计算left_join该数据框到第二个数据框,该数据框计算用于将文本放置在每个面板上的适当y值(因为适当的y值仅根据级别变化JGene).

library(dplyr) 

meanData = df %>% group_by(JGene, DGene) %>%
  summarise(meanCDR = sum(Sum*cdr3_len)/sum(Sum)) %>%
  left_join(df %>% group_by(JGene) %>%
              summarise(ypos = 0.9*max(Sum)))
Run Code Online (Sandbox Code Playgroud)

现在为情节:

ggplot(df,aes(x=cdr3_len, y=Sum)) +
  geom_vline(data=meanData, aes(xintercept=meanCDR), colour="red", lty=3) +
  geom_line() +
  geom_text(data=meanData, 
            aes(label=round(meanCDR,1), x=40, y=ypos), colour="red",
            hjust=1) +
  xlim(c(1,42)) + 
  facet_grid(JGene~DGene,scales="free_y")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述