谷歌广告图片资产分析中geom_image显示填充图形而非图片的问题
解决ggplot中geom_image显示为填充图形而非图片的问题
问题原因
你的代码中,全局ggplot()的aes()里设置了fill和colour映射,而geom_image()默认会继承这些全局美学属性,导致图片被填充颜色覆盖,无法显示原本的图片内容。
解决方案
在geom_image()中添加inherit.aes = FALSE参数,切断对全局美学映射的继承,仅保留该图层需要的x、y、image映射即可:
# Packages library(tidyverse) library(ggimage) library(ggchicklet) # Create sample data df <- data.frame( Asset = c("running_wide", "biomechanicsMan_wide", "running_square", "mandelbrot_wide", "mandelbrot_square", "lines_wide", "systems_square", "systems_wide", "lines_square"), status = rep("Enabled", 9), Asset_type = c("Image", "Image", "Square image", "Image", "Square image", "Image", "Square image", "Image", "Square image"), Performance = c("Best", "Best", "Best", "Best", "Low", "Best", "Good", "Best", "Good"), Asset_source = rep("Advertiser", 9), val = rep(10, 9), font_size = c(10, 10, 10, 10, 10, 10, 10, 10, 10), asset_name = rep("ball", 9), path = rep("https://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/Basketball.png/220px-Basketball.png", 9) ) ggplot(df, aes(x = reorder(Asset, font_size), y = val, fill = Performance, colour = Performance)) + geom_chicklet(width = 0.9, alpha = 0.3, size = 1) + scale_fill_manual(values = c("Best" = "#D6AF36", "Good" = "#A7A7AD", "Low" = "#A77044"), name = NULL) + scale_colour_manual(values = c("Best" = "#D6AF36", "Good" = "#A7A7AD", "Low" = "#A77044"), name = NULL) + # 关键修改:添加inherit.aes = FALSE geom_image(aes(x = reorder(Asset, font_size), y = 1, image = path), size = 0.08, inherit.aes = FALSE) + coord_flip() + theme_void() + theme( legend.title = element_text(size = 16), legend.text=element_text(size=13) )
原理说明
geom_image()本身不需要fill和colour这类美学属性,当它继承了全局的这些映射后,会将图片渲染为填充几何图形而非原始图片。通过inherit.aes = FALSE可以让该图层仅使用自身定义的美学映射,从而正常显示图片。
内容的提问来源于stack exchange,提问作者JDiddy36
相关产品推荐
相关产品推荐

