我的ggplot2或R代码在绘制有序祖先堆叠的barplot时有问题吗?

问题描述 投票:1回答:1

我想创建一个有条理的堆叠条形图,其中比例相似的条形图一起出现。我有一个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") 

enter image description here

我有两个问题:(1)我不知道如何使具有相似比例的这些人聚在一起,并且我已经在堆栈交换上尝试了许多解决方案,但无法使它们在我的数据集上工作!

((2)出于某种原因,似乎当我实现通过降低ancestry中的比例来对个体进行排序的代码时,该代码有时可用于我创建的较小尺寸的玩具数据集,但是当我尝试绘制时10,000个人,该代码不再起作用!这是ggplot2中的问题,还是我做错了什么?我希望对此线程的任何回答也能绘制n = 10,000个堆叠的条形图。

((3)不知道我是否在想这件事,但是在我的堆叠式barplot中,似乎R正在以我不知道的顺序对堆叠式bar的plot进行聚类-因为我可以看到堆叠图之间的规则间隙。实际上,应该没有差距,而且我不确定为什么会发生这种情况。

由于我已经在这段代码上花费了令人尴尬的长时间,所以我将不胜感激!

r ggplot2 bar-chart stacked-chart ancestry
1个回答
0
投票

由于祖先中比例的变化很大,所以条形看起来像是与其他祖先聚在一起的。它以正确的方式绘制。但是,由于人数众多,我们无法区分差异。

[如果您认为数据集上的比例不会失去其含义,并且如果将它们转换为前导指数或对数值,则可以用相同的方式进行解释,可以尝试一下。

具有比例指数的堆积条:

ggplot(qm) + geom_bar(aes(x = individuals, y = exp(proportions), fill= ancestry), 
                      stat="identity")

enter image description here

如果您不想在条形之间留有空隙,请将宽度设置为1。

ggplot(qm) + geom_bar(aes(x = individuals, y = exp(proportions), fill= ancestry), 
                      stat="identity", 
                      width=1) 

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.