R ggplot2在柱之间创建不均匀的间距

R ggplot2在柱之间创建不均匀的间距,r,ggplot2,R,Ggplot2,我试图绘制一个热图图,随着时间的推移,将不同类别的活动可视化。为此,我使用了geom_瓷砖,乍一看效果非常好 但仔细看上面的图表,两列之间的间距非常不均匀。x轴是日期,y轴是一个因素,因此没有充分的理由说明瓷砖的宽度应该适应 我曾尝试使用aes(width=X)更改瓷砖的宽度,但这并不能解决问题 使用的绘图代码,我已删除我确信不会影响此问题的元素: ggplot(monthlyEvents, aes(x=YearMonth, y=EventType, fill=EventRate)) + ge

我试图绘制一个热图图,随着时间的推移,将不同类别的活动可视化。为此,我使用了geom_瓷砖,乍一看效果非常好

但仔细看上面的图表,两列之间的间距非常不均匀。x轴是日期,y轴是一个因素,因此没有充分的理由说明瓷砖的宽度应该适应

我曾尝试使用aes(width=X)更改瓷砖的宽度,但这并不能解决问题

使用的绘图代码,我已删除我确信不会影响此问题的元素:

ggplot(monthlyEvents, aes(x=YearMonth, y=EventType, fill=EventRate)) + geom_tile(colour=bgcolor) + 
  scale_x_date(breaks = date_breaks("1 month"), labels=date_format("%b %Y"), expand = c(0,0)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))+ 
  theme(panel.background=element_rect(fill=bgcolor, colour=bgcolor), panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), panel.border = element_blank()) +
  scale_fill_gradientn(colours=palette, na.value="grey39")

为了其他来找我的人,我要补充这个问题的答案

事实证明,当您使用
date\u breaks(“1个月”)
将日期绘制为月份时,实际上并没有在X轴上使用月份间隔。X轴仍然是日期轴。这意味着月份的间隔将不均匀,因为不同月份的天数不同

为了解决这个问题,我将日期格式化为factor,使用上面使用的漂亮样式,使用

niceFormatting <- format(events$YearMonth, "%Y %b")
MonthFactor <- factor(niceFormatting, levels = niceFormatting)

不同的月份有不同的长度,为了避免类似描述的情况,我更喜欢在绘图之前将数据变量转换为字符或因子。就是这样!这个问题是重复的吗?如果是这样的话,我会移除它。否则,请随意发布答案。@inscaven很棒的提示!我在从一个问题跳到另一个答案时遇到了困难--您是否仍在以某种方式使用scale_x_date()?您是否可以将解决方案与上面的图进行内联显示?谢谢对不起,不够清楚。不,我完全去掉了日期类型,因为缩放不正确,还删除了scale_x_Date。然后用字符串因子在x轴上绘图。为了清楚起见,我会更新的。格式生成格式为“2017年8月”的字符串,该字符串的空间很好且均匀,因为它们只是一个没有线性关系的因素。
ggplot(monthlyEvents, aes(x=MonthFactor, y=EventType, fill=EventRate)) + geom_tile(colour=bgcolor)