我想创建一个有条理的堆叠条形图,其中比例相似的条形图一起出现。我有一个10,000个人的数据框,每个人都来自三个人口。这是我的数据。
library(MCMCpack)
library(ggplot2)
n = 10000
alpha = c(0.1, 0.1, 0.1)
q <- as.data.frame(rdirichlet(n,alpha))
head(q)
individuals <- c(1:nrow(q))
q <- cbind(q, individuals)
head(q)
V1 V2 V3 individuals
1 0.0032720232 3.381345e-08 0.996727943 1
2 0.3354060035 4.433923e-01 0.221201688 2
3 0.0004121665 9.661220e-01 0.033465842 3
4 0.9966997182 3.234048e-03 0.000066234 4
5 0.7789280208 2.090134e-01 0.012058562 5
6 0.0005048727 9.408364e-02 0.905411485 6
# long format for ggplot2 plotting
qm <- gather(q, key, value, -individuals)
colnames(qm) <- c("individuals", "ancestry", "proportions")
head(qm)
individuals ancestry proportions
1 1 V1 0.0032720232
2 2 V1 0.3354060035
3 3 V1 0.0004121665
4 4 V1 0.9966997182
5 5 V1 0.7789280208
6 6 V1 0.0005048727
[没有任何类型的数据排序,我将堆积的条形图绘制为:
ggplot(qm) + geom_bar(aes(x = individuals, y = proportions, fill= ancestry), stat="identity")
我有两个问题:(1)我不知道如何使具有相似比例的这些人聚在一起,并且我已经在堆栈交换上尝试了许多解决方案,但无法使它们在我的数据集上工作!
((2)出于某种原因,似乎当我实现通过降低ancestry
中的比例来对个体进行排序的代码时,该代码有时可用于我创建的较小尺寸的玩具数据集,但是当我尝试绘制时10,000个人,该代码不再起作用!这是ggplot2中的问题,还是我做错了什么?我希望对此线程的任何回答也能绘制n = 10,000个堆叠的条形图。
((3)不知道我是否在想这件事,但是在我的堆叠式barplot中,似乎R正在以我不知道的顺序对堆叠式bar的plot进行聚类-因为我可以看到堆叠图之间的规则间隙。实际上,应该没有差距,而且我不确定为什么会发生这种情况。
由于我已经在这段代码上花费了令人尴尬的长时间,所以我将不胜感激!
由于祖先中比例的变化很大,所以条形看起来像是与其他祖先聚在一起的。它以正确的方式绘制。但是,由于人数众多,我们无法区分差异。
[如果您认为数据集上的比例不会失去其含义,并且如果将它们转换为前导指数或对数值,则可以用相同的方式进行解释,可以尝试一下。
具有比例指数的堆积条:
ggplot(qm) + geom_bar(aes(x = individuals, y = exp(proportions), fill= ancestry),
stat="identity")
如果您不想在条形之间留有空隙,请将宽度设置为1。
ggplot(qm) + geom_bar(aes(x = individuals, y = exp(proportions), fill= ancestry),
stat="identity",
width=1)