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

在R中创建带灰度及指定图案的饼图时遇问题求助

解决步骤与代码

要实现仅部分类别带图案的灰度饼图,需借助ggpattern包,并确保给所有类别明确指定图案类型(无图案的设为"none"),以下是修正后的完整方案:

  1. 先加载依赖包(需提前安装ggpattern):
library(ggplot2)
library(ggpattern)
  1. 替换原geom_bar为geom_col_pattern,映射图案并配置参数:
ggplot(data = spcomp, aes(x = "", y = percent, fill = NameSp, pattern = NameSp)) + 
  # 带图案的柱状层,配置图案颜色、密度等参数
  geom_col_pattern(stat = "identity", position = position_fill(),
                   pattern_fill = "black",  # 图案颜色,与灰度配色协调
                   pattern_density = 0.15,  # 图案密度,避免过密
                   pattern_spacing = 0.02) +  # 图案间距
  geom_text(aes(label = round(percent, digits = 2)), position = position_stack(vjust = 0.5)) +
  coord_polar(theta = "y") +
  facet_wrap(~ Pach_Type) +
  theme(axis.title.x = element_blank(),
        axis.title.y = element_blank()) + 
  # 保留原有的灰度填充配色
  scale_fill_manual(values = c("#000000", "#FFFFFF","#999999", "#FFFFFF", 
                               "#333333", "#666666", "#FFFFFF")) +
  # 核心:给所有7个NameSp类别指定图案,仅Rat用条纹、Vole用点状,其余无图案
  # 注意:values顺序要与NameSp的类别水平顺序完全对应
  scale_pattern_manual(values = c(
    "none", "none", "stripe", "none", 
    "circle", "none", "none"
  ))
关键说明
  • 报错原因:映射pattern = NameSp时,若未给所有类别指定图案,未定义的类别会生成NA,触发逻辑判断错误。因此必须在scale_pattern_manual中为每一个NameSp类别明确设置图案类型。
  • 图案参数调整:pattern_density控制图案密集程度,pattern_spacing控制图案间距,可根据视觉效果自行调整数值。
  • 图案类型可选:ggpattern支持"stripe"(条纹)、"circle"(点状)、"crosshatch"(交叉线)等多种图案,可按需替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:32:46