使用 ggplot 划分每组的直方图计数
Divide histogram counts per group using ggplot
我有这样一个数据框:
df2:
# A tibble: 38,161 x 5
chromosome insRangeBegin cohort gender Cases
<chr> <dbl> <chr> <chr> <dbl>
1 chr1 819957 WL-SA F 173
2 chr1 820179 WL-SA F 173
3 chr1 1610917 WL-PB F 199
4 chr1 1923485 WL-PB F 199
5 chr1 2098854 WL-SA M 113
6 chr1 4051411 WL-SA F 173
7 chr1 4099335 WL-SA F 173
8 chr1 4257094 WL-SA F 173
9 chr1 4346601 WL-SA F 173
10 chr1 4348046 WL-SA F 173
# … with 38,151 more rows
对于每条染色体,我想绘制每个队列和性别的直方图,其中计数除以该队列和性别的“案例”列中的数字。
目前我使用以下代码生成直方图:
df2 %>% filter(chromosome == "chr1") %>% ggplot(.) + geom_histogram(aes(x=insRangeBegin, fill=cohort), binwidth=5e6, position="stack") + facet_wrap(~gender, scales="free") + xlim(c(0, 249250621))
然后我得到:
但是计数(y 轴)未标准化为案例数(例如,我在 WL-SA F 中的计数比 WL-SA M 多,因为它们来自 173 个案例而不是 113 个案例)。
我想得到相同的图表,但是 WL-SA F 的计数除以 173,WL-SA M 的计数除以 113 等,每个 bin。期望的结果是每个案例 的计数直方图,案例数在“案例”列中指定。
解决方案是使用权重。
> df2$weights<-1/df2$Cases
> df2 %>% filter(chromosome == "chr1") %>% ggplot(., aes(x=insRangeBegin, weights=weights)) + geom_histogram(aes(fill=cohort), breaks = seq(0, 249250621, 5e6), position="stack") + facet_wrap(~gender, scales="free")
我有这样一个数据框:
df2:
# A tibble: 38,161 x 5
chromosome insRangeBegin cohort gender Cases
<chr> <dbl> <chr> <chr> <dbl>
1 chr1 819957 WL-SA F 173
2 chr1 820179 WL-SA F 173
3 chr1 1610917 WL-PB F 199
4 chr1 1923485 WL-PB F 199
5 chr1 2098854 WL-SA M 113
6 chr1 4051411 WL-SA F 173
7 chr1 4099335 WL-SA F 173
8 chr1 4257094 WL-SA F 173
9 chr1 4346601 WL-SA F 173
10 chr1 4348046 WL-SA F 173
# … with 38,151 more rows
对于每条染色体,我想绘制每个队列和性别的直方图,其中计数除以该队列和性别的“案例”列中的数字。
目前我使用以下代码生成直方图:
df2 %>% filter(chromosome == "chr1") %>% ggplot(.) + geom_histogram(aes(x=insRangeBegin, fill=cohort), binwidth=5e6, position="stack") + facet_wrap(~gender, scales="free") + xlim(c(0, 249250621))
然后我得到:
但是计数(y 轴)未标准化为案例数(例如,我在 WL-SA F 中的计数比 WL-SA M 多,因为它们来自 173 个案例而不是 113 个案例)。 我想得到相同的图表,但是 WL-SA F 的计数除以 173,WL-SA M 的计数除以 113 等,每个 bin。期望的结果是每个案例 的计数直方图,案例数在“案例”列中指定。
解决方案是使用权重。
> df2$weights<-1/df2$Cases
> df2 %>% filter(chromosome == "chr1") %>% ggplot(., aes(x=insRangeBegin, weights=weights)) + geom_histogram(aes(fill=cohort), breaks = seq(0, 249250621, 5e6), position="stack") + facet_wrap(~gender, scales="free")