我想创建一个堆叠的条形图,就像一个结构图(使用程序 distruct)。如何按一个公因子对 X 标签进行分组,并且只显示该因子一次?例如,下面有来自 2 个群体的 6 个个体,我希望只有 2 个以群体为中心的标签。另外,有没有办法在每个组周围放置一个盒子?
这是我所拥有的:
df <- data.frame(A1=c(0.000, 0.000, 0.020, 0.000, 0.000, 0.000),
A2=c(0.000, 0.000, 0.235, 0.195, 0.166, 0.205),
A3=c(0.065, 0.027, 0.000, 0.027, 0.000, 0.036),
A4=c(0.000, 0.000, 0.007, 0.011, 0.000, 0.000),
A5=c(0.000, 0.000, 0.000, 0.002, 0.028, 0.000),
A6=c(0.000, 0.041, 0.021, 0.068, 0.106, 0.105),
A7=c(0.093, 0.085, 0.001, 0.056, 0.110, 0.000),
A8=c(0.000, 0.000, 0.000, 0.000, 0.000, 0.029),
A9=c(0.000, 0.000, 0.058, 0.027, 0.096, 0.156),
A10=c(0.000, 0.023, 0.129, 0.012, 0.074, 0.117),
A11=c(0.000, 0.041, 0.000, 0.000, 0.000, 0.000),
A12=c(0.024, 0.000, 0.000, 0.000, 0.000, 0.000),
A13=c(0.817, 0.783, 0.527, 0.446, 0.258, 0.321),
A14=c(0.000, 0.000, 0.000, 0.006, 0.000, 0.000),
A15=c(0.000, 0.000, 0.000, 0.054, 0.143, 0.027),
A16=c(0.000, 0.000, 0.000, 0.000, 0.000, 0.003),
A17=c(0.000, 0.000, 0.000, 0.097, 0.019, 0.000))
barplot(t(df), col=rainbow(17), border=NA,space=0.05,
names.arg=c("1","1","2","2","2","2"),
xlab="Population", ylab="Ancestry")
这大致是我想要的:
如果可能的话,最好设置space=
参数并且仍然独立地为组之间的黑色边框选择宽度。
这是我引用的程序:http: //pritchardlab.stanford.edu/structure.html
也许 ggplot 更适合这个?对不起,如果答案很明显,但我无法弄清楚。
注意我意识到您可以手动填写""
特定names.arg
值,但这对于庞大的数据集来说很费力,不能很好地居中标签,也不能解决边界问题。