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

如何为分组条形图指定单个条形添加图案并设置黑色边框

解决分组条形图图案与边框设置问题

要实现仅中间白色条形(对应stress条件)添加条纹图案,同时所有条形带黑色边框,你需要对代码做以下关键调整:

  • 按条件映射图案:在geom_col_pattern的aes中绑定pattern = condition,通过scale_pattern_manual指定仅stress条件使用stripe图案,其余条件设为none。
  • 统一添加黑色边框:给geom_col_pattern加上color = "black"参数,直接为所有条形设置黑色边框,无需保留冗余的geom_bar图层。
  • 修正标签与图例:调整labs中的文字使其匹配数据集,并通过guides确保图例样式与实际图形一致。

修改后的完整代码

library(ggplot2)
library(ggpattern)

# 创建数据集(设置随机种子保证结果可复现)
set.seed(123)
specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) )
condition <- rep(c("normal" , "stress" , "Nitrogen") , 4)
value <- abs(rnorm(12 , 0 , 15))
data <- data.frame(specie,condition,value)

# 绘制图形
ggplot(data, aes(fill=condition, y=value, x=specie, pattern = condition)) + 
  geom_col_pattern(position = "dodge",
                   color = "black", # 所有条形添加黑色边框
                   pattern_angle = 45,
                   pattern_density = .1,
                   pattern_spacing = .04,
                   pattern_fill = 'black') +
  theme_classic() +
  theme(text=element_text(size=16, family="Sans"),
        plot.title = element_text(hjust=0.5, size=20, face='bold')) +
  scale_fill_manual('Condition', values=c('black', 'white', 'lightgrey')) +
  scale_pattern_manual('Condition', values=c("none", "stripe", "none")) + # 仅stress条件显示图案
  labs(x='物种', y='数值', title='不同物种在不同条件下的数值') +
  guides(fill = guide_legend(override.aes = 
                               list(
                                 pattern = c("none", "stripe", "none"),
                                 pattern_spacing = .01,
                                 pattern_angle = c(0, 45, 0)
                               )
  ))

效果说明

运行代码后,只有对应stress条件的白色条形会显示黑色条纹图案,所有条形均带有黑色边框,图例也将正确展示各条件的样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 23:35:05