code: def plot_missing_heatmap(
      config: Settings, corr_mat: Any, mask: Any, columns: List[str]
  ) -> str:
      """Generate missing values heatmap plot.
  
      Args:
          config: report Settings object
          corr_mat: Correlation matrix.
          maks: Upper-triangle mask.
          columns: List of column names.
  
      Returns:
          The resulting missing values heatmap plot encoded as a string.
      """
  
      height = 4
      if len(columns) > 10:
          height += int((len(columns) - 10) / 5)
      height = min(height, 10)
  
      font_size = get_font_size(columns)
      if len(columns) > 40:
          font_size /= 1.4
  
      missing_heatmap(
          corr_mat=corr_mat,
          mask=mask,
          figsize=(10, height),
          fontsize=font_size,
          cmap=config.plot.missing.cmap,
          labels=config.plot.missing.force_labels,
      )
  
      if len(columns) > 40:
          plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.3)
      else:
          plt.subplots_adjust(left=0.2, right=0.9, top=0.8, bottom=0.3)
  
      return plot_360_n0sc0pe(config)
  
file_path: ydata-profiling/src/ydata_profiling/visualisation/missing.py
imports: from typing import Any, List
  from matplotlib import pyplot
  from ydata_profiling.config import Settings
  from ydata_profiling.visualisation.context import manage_matplotlib_context
  from ydata_profiling.visualisation.plot import missing_bar, missing_heatmap, missing_matrix
  from ydata_profiling.visualisation.utils import hex_to_rgb, plot_360_n0sc0pe
label_desc: Use image node_id 4 for calling a global function with example usage: plot_missing_heatmap(config, corr_mat, mask, columns) and returns: plot_360_n0sc0pe