R散点饼图切片图案优化:三类需求的解决方案咨询
针对散点饼图图案设置的解决方案
以下是对应三个问题的具体实现方案,基于ggplot2和ggpattern包:
1. 为7个唯一class类别配置不同图案
ggpattern默认提供的图案类型足够覆盖7种需求,通过scale_pattern_type_manual手动为每个class绑定唯一图案即可:
scale_pattern_type_manual( values = c( y_1 = "stripe", y_2 = "crosshatch", y_3 = "dot", y_4 = "circle", o_1 = "hex", o_3 = "wave", o_4 = "grid" ) )
可根据需求替换图案类型,ggpattern支持的常见类型包括:stripe, crosshatch, dot, circle, hex, wave, grid, brick等。
2. 移除group图例中的图案
通过guides()函数覆盖group图例的美学属性,将图案设为NA即可消除图例条中的图案:
guides( group = guide_legend(override.aes = list(pattern = NA)) )
如果同时需要移除fill图例的图案,可在guides中添加fill = guide_legend(override.aes = list(pattern = NA))。
3. 按class分组指定图案线条颜色
使用scale_pattern_colour_manual根据class前缀(y_/o_)分别设置线条颜色:
scale_pattern_colour_manual( values = c( y_1 = "black", y_2 = "black", y_3 = "black", y_4 = "black", o_1 = "white", o_3 = "white", o_4 = "white" ) )
若class命名有规律,也可通过条件判断简化赋值:
scale_pattern_colour_manual( values = ifelse(grepl("^y_", unique(df$class)), "black", "white") )
完整示例代码
library(ggplot2) library(ggpattern) # 假设df为已处理好的包含饼图多边形坐标、class、fill等字段的数据框 ggplot(df, aes(x = x_pie, y = y_pie, group = interaction(id, class), fill = fill, pattern = class)) + geom_polygon_pattern( colour = "black", pattern_fill = NA, pattern_density = 0.1, pattern_spacing = 0.05 ) + # 配置7种不同图案 scale_pattern_type_manual( values = c( y_1 = "stripe", y_2 = "crosshatch", y_3 = "dot", y_4 = "circle", o_1 = "hex", o_3 = "wave", o_4 = "grid" ) ) + # 指定图案线条颜色 scale_pattern_colour_manual( values = ifelse(grepl("^y_", unique(df$class)), "black", "white") ) + # 移除group图例的图案 guides( group = guide_legend(override.aes = list(pattern = NA)), fill = guide_legend(override.aes = list(pattern = NA)) # 若fill图例也需去图案则保留 ) + coord_equal() # 确保饼图为圆形
内容的提问来源于stack exchange,提问作者user1701545
相关产品推荐
相关产品推荐

