我的数据框看起来像这样。
> 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
...
facet_grid非常简单。
ggplot(df,aes(x=cdr3_len,y=Sum)) + geom_line() + xlim(c(1,42)) + facet_grid(JGene~DGene,scales="free_y")
并得到一些看起来像的东西。
我想知道是否有人可以帮我添加每个网格的平均值的hline。或者可能如何在右上角打印每个网格的平均值。
谢谢,
答案 0 :(得分: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)))
现在的情节:
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")