ggplot

时间:2015-11-09 18:48:54

标签: r date ggplot2

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

End Goal

即使使用默认的缩放和宽度参数,列之间的间隙也会显示不一致,这让我相信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"))

1 个答案:

答案 0 :(得分: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))

enter image description here

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