我正在尝试制作热图,随着时间的推移可视化各种类别的活动。我为此目的使用了geom_tile,乍一看它完美无缺。
但仔细观察上面的图表,列之间的间距非常不均匀。 x轴是Date,y轴是一个因子,因此没有充分理由为什么tile的宽度应该适应。
我尝试使用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")
答案 0 :(得分:1)
我会为了这个问题而添加这个问题的答案。
事实证明,当您使用date_breaks("1 month")
将日期绘制为月份时,它实际上并未在X轴上使用月份间隔。 X轴仍然是日期。这意味着月份间隔不均匀,因为不同月份的天数不同。
为了解决这个问题,我使用
将日期格式化为factor,使用上面使用的漂亮样式niceFormatting <- format(events$YearMonth, "%Y %b")
MonthFactor <- factor(niceFormatting, levels = niceFormatting)
以MonthFactor
作为X轴的绘图按照我的预期进行。没有所有格式:
ggplot(monthlyEvents, aes(x=MonthFactor, y=EventType, fill=EventRate)) + geom_tile(colour=bgcolor)