使用多个变量向ggplot堆积条形图中的条添加自定义标签

ste*_*rt6 1 r annotate bar-chart ggplot2 geom-text

我在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))
Run Code Online (Sandbox Code Playgroud)

关于这个数据(订购):

   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
Run Code Online (Sandbox Code Playgroud)

然后融化为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
Run Code Online (Sandbox Code Playgroud)

每列代表一个鸡蛋样品,该样品中含有%受精和未受精的卵.我想做的是在最上面的每一列上注释,以包括每个样本中的蛋数,在下面的向量中.

 [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
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Did*_*rts 5

你可以创建一个包含新的数据帧Burstsamp列中包含的样本数原始数据帧列.我使这个数据框占据了前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
Run Code Online (Sandbox Code Playgroud)

然后添加标签,geom_text()其中x值为Burst,y值设置为某个常量(1.1),标签为nsamp.文本的角度用参数控制angle=.inherit.aes=FALSE被用来忽略fill=variablegeom_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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述