我在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),只有通用坐标才会应用于每个方面。有什么建议??
谢谢!
答案 0 :(得分: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=variable
的{{1}}。
geom_text()
答案 1 :(得分:3)
最简单的方法可能只是创建一个新数据集,而不是尝试添加到您的egg-sisting 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))