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

使用ggpattern绘制矩形图时,图案仅显示于图例而非绘图区域的技术求助

问题分析与解决

嘿,我一眼就揪出问题所在啦!你代码里的xmin = names和xmax = names是核心bug——这相当于给每个矩形设置了宽度为0的范围,就像画了一条竖线,根本没有空间来显示你设置的条纹或点状图案,只有图例因为自带固定尺寸,才能正常展示图案效果。

修正后的代码

只要给矩形留出合适的宽度,图案就能正常显示在绘图区域了。这里我们把字符型的names转换成数值位置,再给x轴范围加上偏移量:

library(tibble)
library(ggplot2)
library(ggpattern)

test <- tibble(
  names = c("fred", "harry", "tom"), 
  start = c(1, 3, 5), 
  end = c(10, 5, 7), 
  stripe = c("yes", "no", "yes")
)

ggplot() +
  geom_rect_pattern(
    data = test, 
    aes(
      xmin = as.numeric(factor(names)) - 0.4, 
      xmax = as.numeric(factor(names)) + 0.4, 
      ymin = start, 
      ymax = end, 
      color = names, 
      fill = names, 
      pattern = stripe
    ), 
    size = 4
  ) +
  scale_x_continuous(breaks = 1:3, labels = test$names) # 把x轴刻度还原成原始名字

为什么这样改?

因为names是离散的字符变量,直接赋值给xmin和xmax时,ggplot会把每个名字映射到一个数值位置,但你让左右边界完全重合,矩形就被压缩成了一条线,图案没有可渲染的空间。通过as.numeric(factor(names))把名字转换成对应的数值序号,再加减0.4,就能给每个矩形留出合适的宽度,图案自然就能显示出来啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:02:33