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

如何在ggplot柱状图中区分time.frame与type变量(配色+填充图案)

解决方案

1. 安装并加载图案填充工具包

ggplot原生不支持填充纹理,需要借助ggpattern包实现,先完成安装和加载:

install.packages("ggpattern")
library(ggpattern)
library(ggplot2)

2. 替换柱状图图层,绑定图案到type变量

把你原来用geom_col的代码替换成geom_col_pattern,同时将pattern参数关联到type变量,保留原有的fill绑定time.frame的设置,还能通过参数调整图案细节。示例代码如下(替换成你实际的X轴变量即可):

ggplot(df.TS, aes(x = 你的X轴列名, fill = time.frame, pattern = type)) +
  geom_col_pattern(
    position = position_dodge(), # 分组柱状图保留该参数,堆叠图换成position_stack()
    pattern_fill = "black",      # 图案线条的颜色
    pattern_density = 0.1,       # 图案密度,数值越小越稀疏
    pattern_spacing = 0.02       # 图案元素的间距
  ) +
  # 自定义不同type对应的图案类型,按需调整数量和样式
  scale_pattern_manual(values = c("stripe", "crosshatch", "dot")) +
  labs(fill = "时间框架", pattern = "类型") + # 修改图例显示标签
  theme_bw()

3. 进阶优化技巧

  • 若想给不同type设置不同角度的条纹,可把pattern_angle也映射到type:
    ggplot(df.TS, aes(x = 你的X轴列名, fill = time.frame, pattern = type, pattern_angle = type)) +
      geom_col_pattern(position = position_dodge()) +
      scale_pattern_manual(values = c("stripe", "stripe", "stripe")) +
      scale_pattern_angle_manual(values = c(45, 90, 135))
    
  • ggpattern支持的图案类型还有grid(网格)、wave(波浪线)等,可根据需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:47:42