这个问题似乎相当简单,但我找不到另一个回答它的帖子(如果我错过了,很抱歉)。
我有一个包含三个因素的变量(每个月的值)。数据如下所示:
id variable value
AZ Feb-20 1085
AZ Mar-20 1
AZ Apr-20 61
CO Feb-20 6
CO Mar-20 192
FO Apr-20 2
我想把数据堆叠起来,这样我就有了2月份的数据条,然后3月份和4月份的边际增长都堆在了上面。
现在,每个月的值都是叠加在一起的。
ggplot(df3, aes(x = id, y = value, fill=factor(variable, levels=c("Apr-20","Mar-20", "Feb-20")))) + geom_bar(stat = "identity")
我如何从二月份开始增加工资?是否有一种方法可以修改堆叠的条形图,还是需要尝试另一种方法?
编辑
经过思考后,我认为最好的解决办法是重叠条。但较高的栏杆覆盖较小的栏杆。改变透明度并不是非常有用的三个因素。也许有一种方法来重新排序,以便小的酒吧在最前面?
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')
第二编辑道歉,这是我的错,因为不清楚。在此之前,我希望避免堆叠酒壶的累积求和,并要求将每增加一个月作为边际增加。
然而,现在,作为重叠的条形图,没有必要让条形显示变化。重叠条形图的问题是,对于高度较短的条形图,数据是模糊的。
这个地块仍在绘制边际变化图。我在这篇文章中寻找类似于第2点的东西,但是所有的数据都是可见的。
编辑3
也许这是一个更好的解释方法:
以第一个情节中的“WA”为例。2月的数据点为338
,3月的数据点为318
,4月的数据点为2270
。堆叠的条形图将这些元素相加在一起,累积起来。
然而,我想要的'WA‘栏应该显示2月的338
,然后是三月的20
。最后,4月份增加了1952
。
这就是为什么我在堆叠的条形图中使用边际增减的语言。我也尝试过一个重叠的条形图,但是所有的数据都是不可见的,较长的条形图覆盖较短的酒吧。
发布于 2020-05-28 18:10:06
我们可以基于arrange
将列转换为yearmon
类(从zoo
),然后使用指定为unique
元素的levels
转换为factor
(或执行match
并进行转换)。
library(dplyr)
library(zoo)
library(ggplot2)
df1 %>%
arrange(id, as.yearmon(variable, '%b-%y')) %>%
mutate(variable = factor(variable, levels = unique(variable))) %>%
ggplot(aes(x = id, y = value, fill = variable)) +
geom_bar(stat = "identity")
如果我们想要自动完成第二个情节
library(tidyr)
df2 <- df1 %>%
pivot_wider(names_from = variable, values_from = value)
p <- ggplot(df2)
colrs <- c('green', 'navy', 'red')
nm1 <- names(df2)[-1]
for(i in seq_along(nm1)) p <- p +
geom_bar(aes(x = id, y = !! rlang::sym(nm1[i])),
position = 'identity', stat = 'identity', fill = colrs[i])
https://stackoverflow.com/questions/62076843
复制相似问题