调整ggplot+geom_tile(热图)或geom_raster中的网格线

Die*_*Arg 0 grid r time-series heatmap ggplot2

该热图有一个内置网格,我无法找到自定义的方法。

我想保留网格中的水平线,如果可能的话增加厚度,并禁用垂直线。每行应该看起来像一个连续的时间序列,其中存在数据,而不存在数据则为空白。

在顶部添加垂直/水平线可能会覆盖一些数据,因为网格线或小矩形之间的受控间隙是更好的选择。

带有 geom_tile 的热图

或者,geom_raster根本不显示任何网格。我需要添加网格的水平线。

带有 geom_raster 的热图

我尝试更改线型,即 geom_tile 参数,它似乎确实更改了类型或允许使用 linetype=0 完全禁用它,完全禁用网格,但它不允许保留水平网格线。通过修改大小参数,我没有看到任何变化。

这是生成上述绘图的代码:

ggplot( DF, aes( x=rows, y=name, fill = value) ) +   
    #geom_raster( ) +
    geom_tile( colour = 'white' ) +
    scale_fill_gradient(low="steelblue", high="black", 
                        na.value = "white")+
    theme_minimal() +
    theme( 
      legend.position = "none",
      plot.margin=margin(grid::unit(0, "cm")),
      #line = element_blank(),
      #panel.grid = element_blank(),
      panel.border = element_blank(),
      panel.grid = element_blank(),
      panel.spacing = element_blank(),
      #panel.grid = element_line(color="black"),
      #panel.grid.minor = element_blank(),
      plot.caption = element_text(hjust=0, size=8, face = "italic"),
      plot.subtitle = element_text(hjust=0, size=8),
      plot.title   = element_text(hjust=0, size=12, face="bold")) +
    labs( x = "", y = "",
      #caption= "FUENTE: propia",
      fill = "Legend Title",
      #subtitle = "Spaces without any data (missing, filtered, etc)",
      title = "Time GAPs"
    )
Run Code Online (Sandbox Code Playgroud)

我尝试附加DF %>% dput,但发现正文仅限 30000 个字符;您输入了 203304。如果有人熟悉类似的数据集,请告知。

数据集截图

此外,

  • 绘图区域左右有 2 个间隙,其中一个位于 y 轴之间,右侧可以看到 X 轴出站,并且不受参数控制plot.margin
  • 当月份变化时,我想将网格设置为更粗的线。

All*_*ron 5

以下数据集与您的数据集具有相同的名称和基本结构,足以作为示例:

set.seed(1)

DF <- data.frame(
  name = rep(replicate(35, paste0(sample(0:9, 10, T), collapse = "")), 100),
  value = runif(3500),
  rows = rep(1:100, each = 35)
)
Run Code Online (Sandbox Code Playgroud)

让我们用您自己的代码重新创建您的绘图,使用以下geom_raster版本:

library(ggplot2)

p <- ggplot( DF, aes( x=rows, y=name, fill = value) ) +   
    geom_raster( ) +
    scale_fill_gradient(low="steelblue", high="black", 
                        na.value = "white") +
    theme_minimal() +
    theme( 
      legend.position = "none",
      plot.margin=margin(grid::unit(0, "cm")),
      panel.border = element_blank(),
      panel.grid = element_blank(),
      panel.spacing = element_blank(),
      plot.caption = element_text(hjust=0, size=8, face = "italic"),
      plot.subtitle = element_text(hjust=0, size=8),
      plot.title   = element_text(hjust=0, size=12, face="bold")) +
    labs( x = "", y = "", fill = "Legend Title", title = "Time GAPs")

p
Run Code Online (Sandbox Code Playgroud)

这里的关键是要认识到离散轴“实际上”是“在幕后”的数字轴,离散刻度被放置在整数值处,并且因子级别名称被替换为轴上的那些整数。这意味着我们可以使用 , 绘制分隔白线geom_hline,其值为 0.5、1.5、2.5 等:

library(ggplot2)

p <- ggplot( DF, aes( x=rows, y=name, fill = value) ) +   
    geom_raster( ) +
    scale_fill_gradient(low="steelblue", high="black", 
                        na.value = "white") +
    theme_minimal() +
    theme( 
      legend.position = "none",
      plot.margin=margin(grid::unit(0, "cm")),
      panel.border = element_blank(),
      panel.grid = element_blank(),
      panel.spacing = element_blank(),
      plot.caption = element_text(hjust=0, size=8, face = "italic"),
      plot.subtitle = element_text(hjust=0, size=8),
      plot.title   = element_text(hjust=0, size=12, face="bold")) +
    labs( x = "", y = "", fill = "Legend Title", title = "Time GAPs")

p
Run Code Online (Sandbox Code Playgroud)

要更改线条的粗细,只需更改size参数即可。

由reprex 包于 2022 年 8 月 1 日创建(v2.0.1)