如何在y轴上创建具有相同数量的多个值的堆叠条形图

时间:2018-04-24 07:05:21

标签: r ggplot2 stacked-chart

我试图创建一个我需要的条形图,但我无法弄明白。详情如下所示。我有一个更大的数据框,但这是我的数据框的一个小例子:

SampleNumber = 1:5
Probability_n1 = c(1, 1, 1, 1, 1)
Probability_n2 = c(1.30066666666667e-14, 3.375e-17, 3.698e-16, 2.03733333333333e-17, 2.16866666666667e-19)
Probability_n3 = c(1.243e-28, 5.59956666666667e-35, 4.75333333333333e-34, 1.0569e-34, 1.21333333333333e-37)
Probability_n4 = c(2.266e-43, 4.36333333333333e-56, 4.47933333333333e-53, 1.39033333333333e-53, 2.33566666666667e-56)
Probability_n5 = c(1.7407e-57, 2.59733333333333e-76, 7.461e-73, 2.46833333333333e-72, 2.133e-76)
df = cbind(SampleNumber, Probability_n1, Probability_n2, Probability_n3, Probability_n4, Probability_n5)

df

           SampleNumber   Probability_n1   Probability_n2   Probability_n3   Probability_n4    Probability_n5
[1,]           1                1           1.300667e-14     1.243000e-28      2.266000e-43    1.740700e-57
[2,]           2                1           3.375000e-17     5.599567e-35      4.363333e-56    2.597333e-76
[3,]           3                1           3.698000e-16     4.753333e-34      4.479333e-53    7.461000e-73
[4,]           4                1           2.037333e-17     1.056900e-34      1.390333e-53    2.468333e-72
[5,]           5                1           2.168667e-19     1.213333e-37      2.335667e-56    2.133000e-76

我正在尝试创建一个堆叠的条形图(数据框中每个样本/行一个条形图),其中样本编号位于x轴上,y轴的概率使得每个概率(n) = 1,2,3,4,5)在每个样品的相同条中填充不同的颜色。

PS:据我所知,在我的例子中,n = 2,3,4,5值非常小,以显示在条形图上,但我的实际数据框有很多样本,其中不同的n值有很大的概率高于该样本的其他n值。

1 个答案:

答案 0 :(得分:0)

您可以使用ggplot进行可视化:

library(ggplot2)

首先,从您的data.frame创建一个matrix,然后使用数据表包中的melt()从宽到长重新整形,它会为您提供:

head(data.table::melt(df, id.vars = "SampleNumber"))
  SampleNumber       variable        value
1            1 Probability_n1 1.000000e+00
2            2 Probability_n1 1.000000e+00
3            3 Probability_n1 1.000000e+00
4            4 Probability_n1 1.000000e+00
5            5 Probability_n1 1.000000e+00
6            1 Probability_n2 1.300667e-14

然后只需创建一个条形图并使用fill美学为概率添加颜色。

df <- data.frame(df)
data.table::melt(df, id.vars = "SampleNumber") %>% 
  ggplot() +
  geom_bar(aes(y = value,
               x = SampleNumber,
               fill = variable),
           stat = 'identity')

结果如下: enter image description here