我的 ggplot2 或 R 代码是否有问题来绘制有序的祖先堆叠条形图?
Is something wrong with my ggplot2 or R code to plot an ordered ancestry stacked barplot?
我想创建一个有组织的堆叠条形图,其中比例相似的条形图一起出现。我有一个包含 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) 出于某种原因,似乎当我实现代码以按 decreasing/increasing 比例对个人进行排序时 ancestry
,该代码有时适用于我创建的较低维度的玩具数据集,但是当我尝试绘制 10,000 个人时,代码不再起作用了!这是 ggplot2 中的问题还是我做错了什么?我将不胜感激对该线程的任何回答,以绘制 n = 10,000 个堆叠条形图。
(3) 不确定这是不是我的想象,但在我的堆叠条形图中,R 似乎以某种我不知道的顺序对堆叠条形图进行聚类——因为我可以看到堆叠条形图之间的规则间隙地块。实际上,应该没有差距,我不确定为什么会这样。
如果我能提供任何帮助,我将不胜感激,因为我已经在这段代码上工作了很长一段时间,令人尴尬!!
因为,祖先内部的比例差异非常大,条形图看起来像与其他祖先聚集在一起。它以正确的方式绘制。但是,由于人数太多,我们无法区分差异。
如果您认为数据集上的比例不会失去其意义,并且如果将它们转换为指数值或对数值也可以以相同的方式解释,您可以尝试一下。
比例为指数的堆积条:
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)
我想创建一个有组织的堆叠条形图,其中比例相似的条形图一起出现。我有一个包含 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) 出于某种原因,似乎当我实现代码以按 decreasing/increasing 比例对个人进行排序时 ancestry
,该代码有时适用于我创建的较低维度的玩具数据集,但是当我尝试绘制 10,000 个人时,代码不再起作用了!这是 ggplot2 中的问题还是我做错了什么?我将不胜感激对该线程的任何回答,以绘制 n = 10,000 个堆叠条形图。
(3) 不确定这是不是我的想象,但在我的堆叠条形图中,R 似乎以某种我不知道的顺序对堆叠条形图进行聚类——因为我可以看到堆叠条形图之间的规则间隙地块。实际上,应该没有差距,我不确定为什么会这样。
如果我能提供任何帮助,我将不胜感激,因为我已经在这段代码上工作了很长一段时间,令人尴尬!!
因为,祖先内部的比例差异非常大,条形图看起来像与其他祖先聚集在一起。它以正确的方式绘制。但是,由于人数太多,我们无法区分差异。
如果您认为数据集上的比例不会失去其意义,并且如果将它们转换为指数值或对数值也可以以相同的方式解释,您可以尝试一下。
比例为指数的堆积条:
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)