You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R的ggmosaic马赛克图中用ggpatterns实现图案替代颜色

用ggpatterns给ggmosaic图添加填充图案

要在ggmosaic生成的马赛克图中用图案替代颜色填充,可以结合ggpatterns包实现。核心思路是先计算马赛克图的布局坐标,再用ggpatterns的几何图层绘制带图案的矩形块,具体步骤如下:

步骤1:加载所需包

library(ggplot2)
library(ggmosaic)
library(ggpatterns)

步骤2:计算马赛克图布局数据

通过calc_mosaic函数提取原马赛克图的布局信息,包括每个块的位置、尺寸:

mosaic_data <- calc_mosaic(
  data = dat,
  aes(weight = Percent, 
      x = product(Type, Level),
      conds = product(Class),
      fill = Correct)
)

步骤3:绘制带图案的马赛克图

使用geom_pattern_rect替代原geom_mosaic,将分类变量映射到图案类型,同时保留原有的坐标轴和主题设置:

ggplot(mosaic_data) +
  geom_pattern_rect(
    aes(
      xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax,
      pattern = Correct,
      pattern_fill = "black",
      fill = "white"
    ),
    pattern_density = 0.3,
    pattern_spacing = 0.02
  ) +
  # 自定义图案与分类的映射关系
  scale_pattern_manual(values = c(no = "stripe", yes = "crosshatch")) +
  # 沿用原坐标轴配置
  scale_y_productlist(breaks = c(.25, .75), labels = c('1st', '2nd'), expand = c(0, 0.01)) +
  scale_x_productlist(expand = c(0, 0.01)) +
  ggtitle('TITLE') +
  theme_tufte(base_family = 'sans') +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1, size = 10),
    axis.title = element_text(size = 11),
    legend.text = element_text(size = 10),
    legend.title = element_text(size = 11)
  )

额外说明

  • ggpatterns支持多种图案类型,如stripe(条纹)、crosshatch(交叉线)、dot(圆点)、grid(网格)等,可通过scale_pattern_manual自由搭配
  • 调整pattern_density(图案密度)和pattern_spacing(图案间距)参数,可优化图案显示效果
  • 若需要同时保留颜色和图案,可在aes中同时映射fill和pattern,实现组合填充效果

内容的提问来源于stack exchange,提问作者striatum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:33:14