仅使用数字的堆叠条形图

Stacked Barplot using only numerics

我有一个包含 3 列的数据框。第一个 'Position',第二个 'Frac1' 作为分数 1,最后是 Frac2",这是 '1 - Frac1' 之间的差异。

我想使用 'Position' 作为 'x',使用值“0 到 1”作为 'y' 来制作堆叠条形图,并且每个位置都会有一部分 'Frac1',其余的将填充为'Frac2'。

Position <- seq(50)
Frac1 <- runif(50)
Frac2 <- 1-Frac1
A <- data.frame(cbind(Position, Frac1, Frac2))    
barplot(Frac1, ylim=c(0,1), xlab = "POSITION", ylab = "Fraction") 
ggplot() + geom_bar(aes(fill=A$Frac1, y=1, x=A$Position), 
                    data = A, stat="identity")

但是这些图并没有把我放在两列中。

我想要的是这样的

我们可以重塑为 'long' 格式,然后用 ggplot

绘图
library(dplyr)
library(tidyr)
library(ggplot2)
A %>%
    pivot_longer(cols = starts_with('Frac'), values_to = 'Fraction') %>%
    ggplot(aes(x = Position, y = Fraction, fill = name)) +
           geom_col()


或使用gather

A %>%
    gather(name, Fraction, starts_with('Frac')) %>%
    ggplot(aes(x = Position, y = Fraction, fill = name)) +
           geom_col()

或在base R

barplot(`colnames<-`(t(A[-1]), A$Position), legend = TRUE)