1

我在 ggplot2 中创建了一个带有多个变量的堆叠条形图:

在此处输入图像描述

使用以下代码:

library(ggplot2)
ggplot(meltd, aes(x=Burst, y=value, fill=variable)) +
  geom_bar(stat="identity") + facet_grid(~samp,scales="free",space="free") + 
  theme_bw() + scale_fill_manual("Fertilization",values = c('#98FB98', '#FF6347')) +
  scale_x_continuous(breaks = seq(1, 19, by = 1))

在此数据上(已订购):

   Burst      samp     %Fert     %Unfert
1      1    Nassau 1.0000000 0.000000000
5      2    Nassau 0.9793237 0.020676300
8      3    Nassau 0.9774301 0.022569886
16     4    Nassau 0.9750000 0.025000000
13     5    Nassau 0.9734843 0.026515719
12     6    Nassau 0.9651163 0.034883721
17     7    Nassau 0.9516807 0.048319328
4      8    Nassau 0.9444444 0.055555556
9      9    Nassau 0.9183673 0.081632653
14    10    Nassau 0.9106901 0.089309907
18    11    Nassau 0.9074555 0.092544547
7     12    Nassau 0.9017857 0.098214286
10    13    Nassau 0.8622995 0.137700535
3     14    Nassau 0.8559867 0.144013322
6     15    Nassau 0.8551978 0.144802240
15    16    Nassau 0.8389423 0.161057692
11    17    Nassau 0.7916667 0.208333333
19    18    Nassau 0.6976611 0.302338930
2     19    Nassau 0.4482759 0.551724138
25     1 Nassau PT 0.8896552 0.110344828
24     2 Nassau PT 0.1836735 0.816326531
20     1     Tiger 0.9980843 0.001915711
22     2     Tiger 0.9971968 0.002803175
21     3     Tiger 0.9934823 0.006517695
23     4     Tiger 0.8092784 0.190721649
26     1  Tiger PT 0.7407045 0.259295499
27     2  Tiger PT 0.5734797 0.426520270
28     3  Tiger PT 0.4337979 0.566202091

然后将其融化为ggplot创建这个数据框:

   Burst      samp variable       value
1      1    Nassau    %Fert 1.000000000
2      2    Nassau    %Fert 0.979323700
3      3    Nassau    %Fert 0.977430114
4      4    Nassau    %Fert 0.975000000
5      5    Nassau    %Fert 0.973484281
6      6    Nassau    %Fert 0.965116279
7      7    Nassau    %Fert 0.951680672
8      8    Nassau    %Fert 0.944444444
9      9    Nassau    %Fert 0.918367347
10    10    Nassau    %Fert 0.910690093
11    11    Nassau    %Fert 0.907455453
12    12    Nassau    %Fert 0.901785714
13    13    Nassau    %Fert 0.862299465
14    14    Nassau    %Fert 0.855986678
15    15    Nassau    %Fert 0.855197760
16    16    Nassau    %Fert 0.838942308
17    17    Nassau    %Fert 0.791666667
18    18    Nassau    %Fert 0.697661070
19    19    Nassau    %Fert 0.448275862
20     1 Nassau PT    %Fert 0.889655172
21     2 Nassau PT    %Fert 0.183673469
22     1     Tiger    %Fert 0.998084289
23     2     Tiger    %Fert 0.997196825
24     3     Tiger    %Fert 0.993482305
25     4     Tiger    %Fert 0.809278351
26     1  Tiger PT    %Fert 0.740704501
27     2  Tiger PT    %Fert 0.573479730
28     3  Tiger PT    %Fert 0.433797909
29     1    Nassau  %Unfert 0.000000000
30     2    Nassau  %Unfert 0.020676300
31     3    Nassau  %Unfert 0.022569886
32     4    Nassau  %Unfert 0.025000000
33     5    Nassau  %Unfert 0.026515719
34     6    Nassau  %Unfert 0.034883721
35     7    Nassau  %Unfert 0.048319328
36     8    Nassau  %Unfert 0.055555556
37     9    Nassau  %Unfert 0.081632653
38    10    Nassau  %Unfert 0.089309907
39    11    Nassau  %Unfert 0.092544547
40    12    Nassau  %Unfert 0.098214286
41    13    Nassau  %Unfert 0.137700535
42    14    Nassau  %Unfert 0.144013322
43    15    Nassau  %Unfert 0.144802240
44    16    Nassau  %Unfert 0.161057692
45    17    Nassau  %Unfert 0.208333333
46    18    Nassau  %Unfert 0.302338930
47    19    Nassau  %Unfert 0.551724138
48     1 Nassau PT  %Unfert 0.110344828
49     2 Nassau PT  %Unfert 0.816326531
50     1     Tiger  %Unfert 0.001915711
51     2     Tiger  %Unfert 0.002803175
52     3     Tiger  %Unfert 0.006517695
53     4     Tiger  %Unfert 0.190721649
54     1  Tiger PT  %Unfert 0.259295499
55     2  Tiger PT  %Unfert 0.426520270
56     3  Tiger PT  %Unfert 0.566202091

每列代表一个卵子样本,以及该样本中包含的受精卵和未受精卵的百分比。我想做的是在最顶部注释每一列,以在下面的向量中包含每个样本中的鸡蛋数量。

 [1]   20.0   29.0  619.0   36.0  970.0  443.0  112.0 1594.0   98.0  374.0  180.0  215.0  248.0
[14]  342.0  208.0   40.0  238.0  481.0  305.0 1045.0  457.0 1768.0   97.0  220.5  217.5  255.5
[27]  296.0  287.0

我遇到了问题,因为条形图被分成 4 个变量,也因为它是一个堆积条形图。例如,我尝试将鸡蛋编号的向量加倍并将其 cbind 到融化的数据帧上,但是当我使用注释绘制文本时,它在每列的 %Fert 和 %Unfert 块中都放置了一个鸡蛋编号(所以2 个值),而我只想要一个值代表每个样本或列中的鸡蛋总数,位于每列的顶部。使用 geom_text 函数也有点古怪,因为当我尝试添加坐标时,我似乎无法为每个变量(即 Nassau、Nassau PT、Tiger、Tiger PT)添加特定坐标,只有通用坐标然后应用于每个方面。有什么建议么??

谢谢!

4

2 回答 2

5

您可以创建包含原始数据框和包含样本数量的列的新数据框Burst和列。samp我制作了这个数据框,取前 28 行和前两列,meltd并添加nsamp了带有样本数的列。

df.text=cbind(meltd[1:28,1:2],nsamp=round(runif(28,10,200)))
head(df.text)
  Burst   samp nsamp
1     1 Nassau    64
2     2 Nassau    88
3     3 Nassau    57
4     4 Nassau    44
5     5 Nassau    59
6     6 Nassau    86

然后添加标签,geom_text()其中 x 值为Burst,y 值设置为某个常数 (1.1),标签为nsamp。文字的角度由参数控制angle=inherit.aes=FALSE用于忽略fill=variablefor geom_text()

ggplot(meltd, aes(x=Burst, y=value, fill=variable)) +
      geom_bar(stat="identity") + facet_grid(~samp,scales="free",space="free") + 
      theme_bw() + scale_fill_manual("Fertilization",values = c('#98FB98','#FF6347')) +
      scale_x_continuous(breaks = seq(1, 19, by = 1))+
      geom_text(data=df.text,aes(x=Burst,y=1.1,label=nsamp),
             inherit.aes=FALSE,angle=90,hjust=1)

在此处输入图像描述

于 2014-06-07T06:29:59.377 回答
3

最简单的方法可能只是创建一个新数据集,而不是尝试添加到您的鸡蛋支持 data.frame。

在这里,我根据您的框架制作了一个 data.frame meltd,其中包含 Burst 和 samp 变量以及计数。(您需要确保所有数据都正确排列。)

counts<-c(20.0, 29.0, 619.0, 36.0, 970.0, 443.0, 112.0, 1594.0, 98.0, 374.0, 180.0, 215.0, 248.0, 342.0, 208.0, 40.0, 238.0, 481.0, 305.0, 1045.0, 457.0, 1768.0, 97.0, 220.5, 217.5, 255.5, 296.0, 287.0)

eggcounts <- cbind(unique(meltd[, 1:2]), counts=as.integer(counts))

现在我将填充和 y 美学移动到 ,geom_bar()因为我们的文本不需要它们,然后添加文本

ggplot(meltd, aes(x=Burst)) +
  geom_bar(stat="identity", aes(y=value, fill=variable)) + 
  geom_text(data=eggcounts, aes(y=1, label=counts), angle=45, size=4) +
  facet_grid(~samp,scales="free",space="free") + 
  theme_bw() + 
  scale_fill_manual("Fertilization",values = c('#98FB98', '#FF6347')) +
  scale_x_continuous(breaks = seq(1, 19, by = 1))

在此处输入图像描述

于 2014-06-07T06:30:47.660 回答