如何删除 geom_raster 中连续 x 值之间的空间/间隙

JLC*_*JLC 5 r heatmap ggplot2 geom-raster

我正在处理一些时频分解的 EEG 数据,并希望使用 ggplot2 生成类似频谱图的图形。但是,我最终在每个时间点之间都有空白。

Data <- read.csv(url("https://www.dropbox.com/s/al3cygigm86mr3s/Test_Spec_Data.csv?dl=0"))
Run Code Online (Sandbox Code Playgroud)

如果我创建一个 vanilla geom_raster,我会在 x 和 y 数据中得到间隙:

ggplot(Data,aes(Times,Frequency)) +
  geom_raster(aes(fill = ERSP))
Run Code Online (Sandbox Code Playgroud)

默认

如果我做Frequency一个因子,它会填补 y 的空白;但是,沿 x 轴的间隙仍然存在:

  ggplot(Data,aes(Times,factor(round(Frequency,digits=1)))) +
  geom_raster(aes(fill = ERSP))
Run Code Online (Sandbox Code Playgroud)

以 y 作为因子

我可以通过制作Times一个因子来消除差距。

在此处输入图片说明

但是,管理scale_x_discrete这么多数据点很麻烦(注意 x 轴标签)。此外,这些时间数据是连续的,并不是真正的因子。

geom_raster没有width类似的论点geom_bar,我在geom_raster文档中看不到任何类似的内容。

有没有办法保持Times连续但消除观察之间的差距?

Bla*_*sad 4

之所以存在间隙,是因为没有足够的数据(或者更准确地说,它们间隔不均匀)。

您的“因子”转换消除了间隙,因为它消除了数据丢失的 X 或 Y 轴部分。请参阅 Y 轴:刻度是均匀间隔的,但值不是均匀的(8.5-8.1=0.4,而 11.3-10.7=0.6,其中差距最大)。

我可以看到两种解决方案:

  • 对数据进行插值,使源数据均匀分布
  • 使用geom_tile而不是geom_raster并指定widthheight参数来“扩展”您的图块并填补空白,如文档的第四个示例中所述。