15. 解决柱状图数字标记重合问题 - 图1

    主要是,柱状图选择了”stack” 的方式垒在一起,可是,实际的count 却是由重复的一列决定的:

    15. 解决柱状图数字标记重合问题 - 图2

    因此,如何解决数值标记的重复问题呢?

    发现geom_text 仅仅是提供check_overlap 在点重复时可以去重,可是,我们不同柱状图上的“点”,很明显不在一起,它们恰巧只不过是具有相同的数值和(这很显然也是我添加的)。

    那么,如果是只保留一个样本含有一个total_counts 呢?

    我第一个想到的是通过重复判断,如果是重复,就为T,T 的那些列再把total_counts 值改为NA 即可:

    1. tmp <- cbind(mutation_number, duplicated(mutation_number$total_counts))
    2. x <- tmp[tmp$`duplicated(mutation_number$total_counts)`==TRUE,]$total_counts
    3. tmp[tmp$`duplicated(mutation_number$total_counts)`==TRUE,]$total_counts <- NA

    15. 解决柱状图数字标记重合问题 - 图3

    可这样还是有问题,数值显示非常奇怪,而且有的组竟然会没有(duplicated 函数bug吗?)

    换个思路,如果只保留样本最多的Missense_Mutation 分组的total_counts 值呢?

    1. mutation_number[mutation_number$Variant_Classification != "Missense_Mutation", ]$total_counts <- NA

    对应两种图:

    1. p + scale_fill_nejm() + geom_text(aes(label = total_counts), size = 3, position = position_stack(vjust = 1.1))

    15. 解决柱状图数字标记重合问题 - 图4

    1. p + scale_fill_nejm() + geom_text(aes(label = total_counts), position = position_dodge(0.9), vjust = -2.5)

    15. 解决柱状图数字标记重合问题 - 图5

    似乎后者的dodge 还美观一点。但如果能自动识别柱状图最顶端添加text 就好了。

    可是这样还是存在一个问题,如果包含的分类中不含这个所谓最多的Missense_Mutation 呢?

    这里的思路是,分组后获得每个组内最大的counts 值,接着拿它和原来的组内值比较,如果不相等(也就是不是最大值的那些组内值),则将总的counts 值变为NA:

    1. mutation_number_final_2 <- mutation_number_final
    2. tmp4 <- group_by(mutation_number_final_2, Tumor_Sample_Barcode) %>%
    3. summarise(Max_Counts = max(Counts))
    4. mutation_number_final_2 <- merge(mutation_number_final_2, tmp4,
    5. by = "Tumor_Sample_Barcode")
    6. mutation_number_final_2[mutation_number_final_2$Counts != mutation_number_final_2$Max_Counts, ]$Total_Counts <- NA