重新排列图中的叠加条,使更长的条位于-R

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

我有一个要覆盖的条形图。问题是较长的条覆盖了较短的条。 excel中有一个功能,可以将较长的杆推到后面,而将较短的杆推到最前面。如何在R中执行此操作?

我的代码在下面:

ggplot(df2) +geom_bar(aes(x = id, y = `Feb-20`), position = "identity",stat="identity", fill = 'green') +
  geom_bar(aes(x = id, y = `Mar-20`), position = "identity", stat="identity",fill = 'navy') +
  geom_bar(aes(x = id, y = `Apr-20`), position = "identity", stat="identity", fill = 'red') 

并生成此图表:

enter image description here

现在,我已经看到了通过更改透明度来解决此问题的一些方法。由于我有三个因素,因此更改Alpha值还不是很清楚:

enter image description here

如何更改条形图的叠加顺序,以便后面有更长的条形图?

r ggplot2 geom-bar
1个回答
0
投票

如果要绘制条形图,但要提供geom_colx=美观性,我建议您切换到y=See here for the documentation explanation。话虽这么说,它将以任何一种方式起作用。基本上:

  • 整洁的数据:我无法确认,但是看来您的数据集df2并未按照Tidy Data Principles进行组织,这使ggplot2和许多其他数据分析方法变得更加容易。而不是让y值在df2$Mar-20df2$Apr-20之间分配,您应该有一列用于类别(将其称为df2$date)和一列用于实际值df2$y。然后,您将有一个呼叫geom_bar,即得到aes(x=id, y=y)。您可以通过dplyr::gather()包中的meltreshape2来执行此操作。

  • [排列数据:在不受任何其他影响(例如因子水平的排序)的影响下,ggplot2中的绘图函数将根据x=的实际数据帧的排列来绘制数据]和y=美学。这意味着,如果您事先按特定的非因数值对数据进行排序,这将决定ggplot2的绘制顺序。因此,在绘制之前,应基于降序df2$y对图进行排序,以使最大的条形排在最前面,而最小的条形排在最后,这意味着最小的条形将位于前面。

这是一个完整的虚拟数据示例:

library(ggplot2)
library(dplyr)

set.seed(1234)
df <- data.frame(
  x=rep(LETTERS[1:10],3),
  y=sample(1:100,30,replace=TRUE),
  id=c(rep('Group1',10),rep('Group2',10),rep('Group3',10))
)

df %>%
arrange(-y) %>%
ggplot(aes(x,y)) + theme_bw() +
  geom_bar(aes(fill=id),stat='identity',position=position_identity())

enter image description here

尝试使用不具有ggplot()功能的arrange()功能,您会看到效果就是您想要做的。

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