我找了一会儿,却无法找到一篇讨论类似问题的帖子。我在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"))
答案 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))
另一种方法可能是手动计算月中,将数据放在那里,然后按照条宽= MonthLength的原始路线。