R语言 当一个因子多次出现时,如何防止条形图堆叠?

6tqwzwtp  于 2023-01-22  发布在  其他
关注(0)|答案(2)|浏览(186)

我有问题,在防止相同的因素堆叠在自己的顶部时,绘制一个条形图。问题是,我不知道如何绘制这种因素的唯一值,我最终有它的n倍(n =倍的因素是重复)在同一个图。这里有一个很好的例子的问题:

library("ggplot2")

mydata <- data.frame(var_one=rep(c("a", "b", "c", "d", "e"), 5), var_two=rep(c(1.5, 2, 2.2, 1.8, 1.2), 5))

dev.new()
ggplot(mydata, aes(x=var_one, y=var_two)) +
    geom_bar(stat="identity", fill="lightcoral", alpha=.8, width=.4, color="black")

我们的目标是只拥有多个堆叠因子中的一个。如何做到这一点?我也尝试使用geom_col,而不是geom_bar,但似乎没有解决问题。

dev.new()
ggplot(mydata, aes(x=var_one, y=var_two)) +
    geom_col(fill="lightcoral", alpha=.8, width=.4, color="black")

这就是我需要的

mydata_mod <- data.frame(var_one=c("a", "b", "c", "d", "e"), var_two=c(1.5, 2, 2.2, 1.8, 1.2))

dev.new()
ggplot(mydata_mod, aes(x=var_one, y=var_two)) +
    geom_bar(stat="identity", fill="lightcoral", alpha=.8, width=.4, color="black")

但问题是我使用的数据结构不是mydata_mod的格式,而是定义为mydata,我必须保持这种格式,有什么想法吗?

wz8daaqr

wz8daaqr1#

通过使用stat_summary或在geom_bar中切换到stat="summary"来动态计算sum,可以获得所需的结果:

library("ggplot2")

ggplot(mydata, aes(x = var_one, y = var_two)) +
  stat_summary(
    geom = "bar", fun = "sum",
    fill = "lightcoral", alpha = .8, width = .4, color = "black"
  )

ggplot(mydata, aes(x = var_one, y = var_two)) +
  geom_bar(
    stat = "summary", fun = "sum",
    fill = "lightcoral", alpha = .8, width = .4, color = "black"
  )

slhcrj9b

slhcrj9b2#

另一种选择是对数据进行争论:

library(dplyr)
library(ggplot2)

mydata %>% 
  group_by(var_one) %>% 
  summarise(sum = sum(var_two)) %>% 
  ggplot(aes(x = var_one, y=sum)) +
  geom_col(fill="lightcoral", alpha=.8, width=.4, color="black")

相关问题