簡體   English   中英

用 geom_bar 打破 ggplot2 中的 y 軸

[英]Breaking y-axis in ggplot2 with geom_bar

我很難處理這個 plot。 ANI> 96 中的值的高度使得難以閱讀紅色和藍色百分比文本。 通過查看 StackOverflow 中其他帖子的答案,我未能打破 y 軸。

有什么建議么?

謝謝。

library(data.table)
library(ggplot2)

dt <- data.table("ANI"= sort(c(seq(79,99),seq(79,99))), "n_pairs" = c(5, 55, 13, 4366, 6692, 59568, 382873, 397996, 1104955, 282915,
                 759579, 261170, 312989, 48423, 120574, 187685, 353819, 79468, 218039, 66314, 41826, 57668, 112960, 81652, 28613,
                 64656, 21939, 113656, 170578, 238967, 610234, 231853, 1412303, 5567, 4607268, 5, 14631942, 0, 17054678, 0, 3503846, 0),
                 "same/diff" = rep(c("yes","no"), 21))

for (i in 1:nrow(dt)) {
  if (i%%2==0) {
    next
  }
  total <- dt$n_pairs[i] + dt$n_pairs[i+1]
  dt$total[i] <- total
  dt$percent[i] <- paste0(round(dt$n_pairs[i]/total *100,2), "%")
  dt$total[i+1] <- total
  dt$percent[i+1] <- paste0(round(dt$n_pairs[i+1]/total *100,2), "%")
}

ggplot(data=dt, aes(x=ANI, y=n_pairs, fill=`same/diff`)) +
  geom_text(aes(label=percent), position=position_dodge(width=0.9), hjust=0.75, vjust=-0.25) +
  geom_bar(stat="identity") + scale_x_continuous(breaks = dt$ANI) +
  labs(x ="ANI", y = "Number of pairs", fill = "Share one common species taxonomy?") + 
  theme_classic() + theme(legend.position="bottom")

這是我所做的主要更改的列表:

  • 我通過使用coord_cartesian (由coord_flip調用)放大圖表來縮小 y 軸。

  • coord_flip還應該通過切換 x 和 y 來提高圖表的可讀性。 我不知道這個開關是否適合你。

  • 現在position_dodge也可以按預期工作:兩個條彼此相鄰,標簽位於頂部(在本例中位於左側)。

  • 我在geom_bar之前設置了geom_text ,以便文本始終位於圖表中的條形之前。

  • 我設置scale_y_continuous來更改 y 軸的標簽(在圖表中,由於開關的原因是 x 軸)以提高零點的可讀性。

ggplot(data=dt, aes(x = ANI, y = n_pairs, fill = `same/diff`)) +
    geom_bar(stat = "identity", position = position_dodge2(width = 1), width = 0.8) + 
    geom_text(aes(label = percent), position = position_dodge2(width = 1), hjust = 0, size = 3) +
    scale_x_continuous(breaks = dt$ANI) +
    scale_y_continuous(labels = scales::comma) +
    labs(x ="ANI", y = "Number of pairs", fill = "Share one common species taxonomy?") + 
    theme_classic() + 
    theme(legend.position = "bottom") +
    coord_flip(ylim = c(0, 2e6))

在此處輸入圖像描述


編輯

像這樣的列和標簽是堆疊的,但標簽永遠不會重疊。

ggplot(data=dt, aes(x = ANI, y = n_pairs, fill = `same/diff`)) +
    geom_bar(stat = "identity", width = 0.8) + 
    geom_text(aes(label = percent,
                                hjust = ifelse(`same/diff` == "yes", 1, 0)), 
                        position = "stack", size = 3) +
    scale_x_continuous(breaks = dt$ANI) +
    scale_y_continuous(labels = scales::comma) +
    labs(x ="ANI", y = "Number of pairs", fill = "Share one common species taxonomy?") + 
    theme_classic() + 
    theme(legend.position = "bottom") +
    coord_flip(ylim = c(0, 2e6))

在此處輸入圖像描述

或者,您可以避免標簽與check_overlap = TRUE重疊,但有時不會顯示其中一個標簽。

ggplot(data=dt, aes(x = ANI, y = n_pairs, fill = `same/diff`)) +
    geom_bar(stat = "identity", width = 0.8) + 
    geom_text(aes(label = percent), hjust = 1, position = "stack", size = 3, check_overlap = TRUE) +
    scale_x_continuous(breaks = dt$ANI) +
    scale_y_continuous(labels = scales::comma) +
    labs(x ="ANI", y = "Number of pairs", fill = "Share one common species taxonomy?") + 
    theme_classic() + 
    theme(legend.position = "bottom") +
    coord_flip(ylim = c(0, 2e6))

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM