在 barplot (ggplot2) 中向第三个变量添加另一个标签

Adding another label to third variable in barplot (ggplot2)

我的目标是创建一个可视化三个变量百分比的条形图;然而,我当前的图表以一种相当混乱的方式这样做。 一点上下文:我的每个变量都可以有两个可能值之一:

总的来说,数据框看起来像这样(多了几千行):

     Reference Register Variety
1      null      S1A    SING
2      null      S1A    SING
3      null      S1A    SING
4      null      S1A    SING
5      null      S1A    SING
6      null      S1A    SING

我使用以下代码创建了下面的条形图:

data_raw <- read.csv("INPUT.csv", TRUE, ",")

data_2 <- data_raw %>%
  count(Reference, Variety, Register) %>%
  mutate(pct = n / sum(n),
         pct_label = scales::percent(pct))

ggplot(data_2, aes(x= Reference, fill = Variety, y = pct)) +
  geom_col() +
  geom_text(aes(label = paste(pct_label, n, sep = "\n")), 
            lineheight = 0.8,
            position = position_stack(vjust = 0.5)) +
  scale_y_continuous(labels = scales::percent)

第三个变量,Register,由单色框中的两个独立值表示,例如 684/20.22% (S1B) 和 931/27.52% (S1A) ) 对于品种 GB。虽然我可以从我的数据中推断出这两个值中的哪一个代表 S1A 或 S1B,但我也需要从条形图中看出这一点。例如,是否可以在“684/20.22%”上添加一个标签,表示它是S1B值?

另一个明显的问题是,x 值“null”的数据包含的百分比非常低,难以阅读。我不确定处理此问题的最佳方法是什么。也许完全取消数字并仅依赖颜色是有意义的。

对于我的问题的任何建议或解决方案,我将不胜感激。我还是初学者,希望能更好地使用R进行数据分析。

如果您只想将 Register 添加到标签中,我认为只需将其添加到标签中即可:

...
geom_text(aes(label = paste(Register, pct_label, n, sep = "\n")), 
...

但是我认为您可能想要寻找一些更美观的想法,例如 or making it semi-transparent 用于 Register 变量。

要抖动挤标签,可以看一下