ggplot中月份缩放时条形宽度不一致

fla*_*777 -8 r date ggplot2

我找了一会儿,无法找到一个讨论类似问题的帖子.我遇到了日期缩放的问题ggplot,我认为这与ggplot处理日期的方式有关.我试图摆脱列之间的所有空白区域,因为我的最终结果将类似于以下内容,这是一个容量规划图表,显示跨越几个月的项目:

结束目标

即使使用默认的缩放和宽度参数,列之间的间隙也显示不一致,这使我相信这ggplot可能是以设定的宽度绘制所有列,而是将它们放在相对于每个月的天数的x轴上.但是,即使在创建"月长度"变量以独立缩放每个列之后,我也无法将所有间隙关闭,而不会导致其他间隙重叠.有人可以提供一些有关ggplot处理日期的见解吗?

以下是一些可重现的代码:

library(lubridate)
library(ggplot2)
library(scales)

Months <- c("2015-01-01", "2015-02-01", "2015-03-01", "2015-04-01", "2015-05-01", 
            "2015-06-01", "2015-07-01", "2015-08-01", "2015-09-01", "2015-10-01")
Months <- as.Date(Months)
Totals <- c(1330, 1010, 950, 1110, 1020, 1160, 1320, 880, 620, 320)
df <- data.frame(Months, Totals)
df$MonthLength <- days_in_month(as.Date(df$Month))

ggplot()+
  geom_bar(data=df, aes (x = Months, y = Totals, fill = Months, width = MonthLength), 
                    position = "dodge", stat = "identity", alpha = 0.80)+
  coord_cartesian(ylim = c(0, 1600))+
  scale_x_date(breaks="1 month",limits=c(as.Date("2015-01-01"),as.Date("2015-10-01")), 
                                labels = date_format("%b-%Y"))
Run Code Online (Sandbox Code Playgroud)

RHA*_*RHA 16

我认为正在发生的事情是,ggplot会在每个月15日放置每个刻度标记,因此每个栏位.因此,如果你使条形较大,那么二月条与游行重叠,但不到一月.(我会称那是一个错误,但我是谁;-))

解决这个问题的方法是将你的月份转换为一个因子,然后设置width=1:

df$Fmonth <- factor(month(Months))
ggplot(data=df, aes (x = Fmonth, y = Totals, fill = Months)) +
  geom_bar(position = "dodge", stat = "identity", alpha = 0.80, width=1) +
  coord_cartesian(ylim = c(0, 1600))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

另一种方法可能是手动计算月中,将数据放在那里,然后按照原始的条宽度= MonthLength.

  • @ flaco777我可以问你为什么不接受这个答案? (21认同)