在ggplot2中的给定图表中更改堆积条形图的顺序

时间:2019-03-18 16:55:47

标签: r ggplot2

我一直在努力改变给定图表中堆积条形的顺序。

我确实找到了其他几个话题,它们讨论了ggplot2堆积条形图的顺序,但是没有一个回答我的特定问题。 (How to change stacking order in stacked bar chart in R?How to control ordering of stacked bar chart using identity on ggplot2R: changing color of stacked barplot

以下是一些可再现的数据来说明我的问题:

df <- data.frame("Gene" = 1:300, "A" = runif(300), "B" = runif(300), "C" = runif(300))

现在让我们按A,B或C的最大值对数据帧进行排序。

max.var <- pmax(df$A, df$B, df$C)
df <- df[order(max.var, decreasing=T),]
head(df)

Gene         A         B         C
290 0.1843646 0.9998304 0.4633329
86 0.2595463 0.9977324 0.3269114
18 0.9959791 0.0368044 0.9469783
238 0.9944759 0.5037651 0.6842606
260 0.4355420 0.4844317 0.9934755
3 0.3702984 0.9922708 0.4254061

最后让我们对其进行排序,以便创建3个不同的组:第一个将A高于B和C的所有情况重新分组,第二个将B高于A和C的情况重新分组,最后一个C更高的情况比A和B要多。

max.var <- pmax(df$A, df$B, df$C)
df.ordered <- rbind(df[which(df$A==max.var),], df[which(df$B==max.var),], df[which(df$C==max.var),])
head(df.ordered)

Gene         A         B         C
18 0.9959791 0.0368044 0.9469783
238 0.9944759 0.5037651 0.6842606
235 0.9857518 0.2102292 0.6547545
121 0.9809101 0.5440542 0.4712545
73 0.9791348 0.4560130 0.3859089
252 0.9677200 0.3219051 0.5486373

现在要将其绘制为堆积的条形图,让我们格式化数据:

df.Toplot <- data.frame("Value" = c(df.ordered$A, df.ordered$B, df.ordered$C), "Var" = factor(rep(c("A", "B", "C"), each=nrow(df)), levels=c("C", "B", "A")), "Gene" = factor(rep(df.ordered$Gene, 3), levels=df.ordered$Gene))
Plot <- ggplot(data=df.Toplot, aes(x=Gene, y=Value, fill=Var)) + geom_bar(stat="identity")
print(Plot)

这段代码给了我一些东西,可以根据基因的最大值(在A,B和C之间)对它们进行分组: Example1

在这里,我们有三个组,我们可以轻松地将它们识别为(i)A>(B或C),(ii)B>(A或C)和(iii)C>(A或B)。第一组看起来不错,但我希望其他两个组看起来像它,这意味着B组基因中的第一个条给出B的值,而C组基因中的第一个条给出C的值。

我知道我可以制作三个单独的图,但是我的最终目标是制作一个圆棒图,而我看不到如何用三个不同的图来做。

圆形图:

Plot2 <- ggplot(data=df.Toplot, aes(x=Gene, y=Value, fill=Var)) + geom_bar(stat="identity") + coord_polar(start = 0)
print(Plot2)

ExampleCircularBarPlot

我将非常感谢您的帮助,如果有任何不清楚的地方,请告诉我,这是我第一次在这里提出问题!

1 个答案:

答案 0 :(得分:1)

我不确定是否要关注,但这是您要寻找的吗?

Plot <- ggplot(data=df.Toplot, aes(x=Gene, y=Value, fill=Var, group = Value)) + geom_bar(stat="identity")
print(Plot)

enter image description here