我在 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)添加特定坐标,只有通用坐标然后应用于每个方面。有什么建议么??
谢谢!