如何在R语言柱状图中为每个柱子添加图片?ggpattern使用异常
解决ggpattern柱状图无法显示图片的问题
你这代码里有几个关键问题导致图片显示不出来,柱子还全是灰色,我给你梳理下问题,再放修正后的代码:
问题出在哪
- 数据初始化写错了:创建
df的时候,你用cut(df$example_column, breaks = 6),但这时候df还没创建出来呢,这会直接报错或者生成错误的分箱结果。 - 柱状图的统计逻辑错了:直接用原始数据画
geom_bar_pattern,每个数据点都会画一遍,柱子高度不对不说,图片也没法正确渲染——得先统计每个分箱的频数才行。 - 映射和参数没配对:你把
geom_bar_pattern的pattern参数硬写成了"image",还没正确把图片路径和柱子的映射关系搭好,导致图片没法关联到对应的柱子。
修正后的代码
library(ggplot2) library(ggpattern) # 先生成数值再分箱,避免未定义变量的错误 set.seed(123) # 固定随机种子,结果可复现 example_column <- rnorm(32) df <- data.frame( example_column = example_column, bin = cut(example_column, breaks = 6) ) # 先统计每个bin的频数,这步是关键,不然柱子会重复绘制 df_count <- as.data.frame(table(df$bin)) colnames(df_count) <- c("bin", "count") # 给每个bin绑定对应的图片路径 unique_bins <- df_count$bin image_paths <- c("img1.png", "20190530153216.png", "download.png", "dstack2.png", "Dstack091.png", "Rodząca_dafnia.png") # 检查图片数量是否够 if (length(unique_bins) > length(image_paths)) { stop("Not enough image paths to match unique 'bin' values") } df_count$image_paths <- image_paths[1:length(unique_bins)] # 绘制带图片填充的柱状图 p <- ggplot(df_count, aes(x = bin, y = count, pattern = image_paths)) + geom_bar_pattern( stat = "identity", # 用预统计好的频数,不用ggplot自动统计 pattern = "image", color = "purple", fill = "white", # 给柱子加白色底色,图片显示更清晰 pattern_scale = 0.8 # 调整图片缩放比例,避免变形 ) + scale_pattern_manual(values = df_count$image_paths) + labs(x = "Residual Value", y = "Count") + theme_minimal() print(p)
额外要注意的点
- 确认图片文件在当前工作目录里,用
getwd()能查看当前目录,要是不在的话就用绝对路径(比如"D:/my_images/img1.png")。 - 图片得是PNG、JPG这种ggpattern支持的格式,损坏的图片也会显示不出来。
- 要是图片在柱子里显示太大或太小,调
pattern_scale参数就行,数值越大图片越大。
内容的提问来源于stack exchange,提问作者QMan5
相关产品推荐
相关产品推荐

