geom_raster绘图白条纹原因咨询:日期转因子后恢复正常
为什么ggplot绘制的raster图会出现白条纹?
嘿,这个问题我之前帮不少朋友排查过,咱们一步步拆解来看:
1. 连续型x轴(原始date)导致白条纹的原因
当你的x=date时,date默认是Date类(连续型变量),这时候geom_raster的渲染逻辑是这样的:
- 它会根据连续时间轴的实际比例来分配每个数据点对应的单元格空间。如果你的日期数据存在间隙(比如某天没有记录),ggplot会在这些缺失的时间位置自动留出空白区域,也就是你看到的白条纹。
- 另外你设置的
hjust=0和vjust=0在连续轴下是基于数据点的位置比例来调整的,很容易让相邻单元格之间出现微小的缝隙,视觉上就变成了白条纹。
2. 转成as.factor(date)后恢复正常的原因
把date转为因子后,x轴变成了离散型变量,这时候geom_raster的逻辑完全变了:
- 它会把每个日期(因子水平)当作独立且等宽的单元格,不管日期之间有没有实际的时间间隙,都会均匀分配空间,不会为缺失日期留白。
- 离散轴下,
hjust=0和vjust=0是让单元格对齐到离散刻度的起始边界,相邻单元格之间会紧密贴合,自然就没有白条纹了。
额外小技巧
如果你不想把date转成因子(比如需要保留时间轴的连续特性),可以用geom_tile替代geom_raster,并指定width=1(对应单日宽度),也能解决白条纹问题:
ggplot(test_l,aes(x=date,y=as.factor(IDNum),fill=as.factor(AE)))+ geom_tile(hjust=0,vjust=0, width=1)+ theme_classic()+ theme(axis.title.y=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank(), panel.grid.major.x =element_blank())+ scale_fill_grey()
内容的提问来源于stack exchange,提问作者Misha
相关产品推荐
相关产品推荐

