如何在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
相关产品推荐
相关产品推荐

