繁体   English   中英

向具有多个变量的ggplot堆叠条形图中的条形添加自定义标签

[英]Add custom labels to bars in ggplot stacked bar graph with multiple variables

我在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个变量,而且还因为它是堆积的条形图。 例如,我尝试将卵数的向量加倍并将其绑定到融化的数据框中,但是当我使用注释绘制文本时,将卵数放入每列的%Fert和%Unfert块中(因此2个值),而我只想在每个列的顶部代表一个值,代表每个样本或列中鸡蛋的总数。 使用geom_text函数也有些古怪,因为当我尝试添加坐标时,我似乎无法为每个变量(例如Nassau,Nassau PT,Tiger,Tiger PT)添加特定的坐标,因此只能将通用坐标应用于每个方面。 有什么建议么??

谢谢!

你可以创建一个包含新的数据帧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

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

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)

在此处输入图片说明

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

在这里,我根据meltd帧制作一个data.frame,其中包含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))

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM