【问题标题】:R: Non-overlapping bars in same group ggplotR:同一组ggplot中的非重叠条
【发布时间】:2021-01-28 03:12:20
【问题描述】:

我有一个 ggplot 条形图,如下所示:

但红利栏与帐户充值栏重叠。我希望这些条对 op 求和,因此例如第一个条在 y 轴上需要等于 152。有谁知道如何实现这一目标?在我的情况下,使用方面并不理想。我必须将它绘制在一张图中。

这是我的数据的(一部分)示例:

data <- data.frame(
            sale_year_month = c("2020-04", "2020-04", "2020-04", "2020-05", "2020-05", "2020-05"),
            spending_type = c("Account recharge", "Bonus", "Account use", "Account recharge", "Bonus", "Account use"),
            spending = c(140, 12, 53, 222, 16, 224.50),
            grp = c(0,0,1,0,0,1)

这是我用来绘制 ggplot 的代码:

ggplot(spending_aalst_totaal, aes(x = sale_year_month, y = spending, group = grp, fill = spending_type)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  geom_text(aes(label = spending), position = position_dodge(width = 0.9), vjust = -0.5, color = "black", size = 4) +
  scale_fill_manual(values = c("darkseagreen", "firebrick2", "darkseagreen4")) +
  theme(axis.text.x = element_text(size = 10, angle = 45))

谢谢!

【问题讨论】:

  • 你用什么代码来制作那个情节?
  • @DanAdams,我的绘图代码现在显示在问题中。
  • 谁能帮帮我?

标签: r ggplot2


【解决方案1】:

一种使用构面的方法,但首先需要一个组才能正确排列条形:

library(dplyr)
library(ggplot2)
#Code
data %>%
  mutate(Var=ifelse(spending_type %in% c('Account use'),'A','B')) %>%
  ggplot(aes(x=Var,y=spending,
             fill=factor(spending_type)))+
  geom_bar(stat = 'identity')+
  facet_wrap(.~sale_year_month,strip.position = 'bottom')+
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        strip.placement = 'outside',
        strip.background = element_blank(),
        panel.spacing = unit(0,'lines'))+
  labs(fill='Var')

输出:

【讨论】:

  • 谢谢您的回答它可以工作,但我不想使用一个方面,因为我想要一个情节中的所有条形。你知道怎么做吗?
  • @ElineHaldermans 这是达到输出的更实用的方法,否则您将不得不手动将其他值添加到可能很复杂的 x 轴。
  • 输出必须在一个图表中,因为当月份越多时,它的结构就越少
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 2017-06-09
相关资源
最近更新 更多