使用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
相关产品推荐
相关产品推荐

