按颜色排列的观察条形图

Barplot of observations by color

我有一个包含 50965 行和 4 列的数据框,如下所示:

hap1_a hap2_a hap1_b hap2_b
EUR EUR EUR EUR
EUR EUR AFR EUR
EUR EUR AFR EUR
AFR EUR AFR NAM
AFR EUR NAM NAM
NAM EUR NAM NAM

每个观察值可以是 AFR、EUR 或 NAM。 我想要的是绘制一个堆叠条形图 (Barchart) 并根据 EUR 的蓝色、AFR 的红色和 NAM 的绿色为观察结果着色,这样我就可以通过颜色进行直接比较。

library(tidyverse, warn.conflicts = F)

df <- read.table(header = T, text = 'hap1_a hap2_a hap1_b hap2_b
EUR EUR EUR EUR
EUR EUR AFR EUR
EUR EUR AFR EUR
AFR EUR AFR NAM
AFR EUR NAM NAM
NAM EUR NAM NAM')

df %>%
  pivot_longer(everything()) %>%
    ggplot(aes(x = name, y = ..count.., fill = value)) +
  geom_bar()


对于评论中所述的要求

library(tidyverse, warn.conflicts = F)

df <- read.table(header = T, text = 'hap1_a hap2_a hap1_b hap2_b
EUR EUR EUR EUR
EUR EUR AFR EUR
EUR EUR AFR EUR
AFR EUR AFR NAM
AFR EUR NAM NAM
NAM EUR NAM NAM')

df %>%
  pivot_longer(everything()) %>%
  arrange(name) %>%
  mutate(value = as.factor(match(value, unique(value)))) %>%
  ggplot(aes(x = name, y = ..count.., fill = value)) +
  geom_bar() +
  scale_fill_manual(values = c('blue', 'red', 'green'), labels = c('EUR', 'AFR', 'NAM'))

reprex package (v2.0.0)

于 2021-07-05 创建