如何为barmekko条形图添加彩色轮廓线?
解决barmekko条形图添加黑色轮廓无效的问题
问题原因
barmekko函数底层通过geom_rect绘制矩形实现mekko图,而非geom_bar或geom_col,因此额外添加这些图层不会对现有图形产生影响,需要直接针对底层的矩形图层设置轮廓颜色。
解决方案
方法1:直接在barmekko调用中传入color参数(推荐)
barmekko支持通过...传递参数给底层的geom_rect,直接添加color = "black"即可为所有矩形添加黑色轮廓:
library(ggpubr) library(gridExtra) library(egg) library(mekko) library(lemon) library(ggh4x) plotq <- data.frame(product = c(51.7,65.5,6.9, 27.6,13.8), profit_margin = c(24.6, 70.2,1.3 ,1.3, 0.5), D= c(32.8,33.6,2.6,12.1,5.2), revenue = c(51.7,65.5,6.9, 27.6,13.8)) # 给barmekko添加color参数设置轮廓颜色 NUMER <- barmekko(plotq, product, profit_margin, revenue, color = "black") + scale_fill_manual(values = c("#8DFF47","#FF9BB1","#FF974C","#F1FF54","#BFFAFF"))+ scale_y_continuous(expand = expansion(mult = c(0, 0.5))) + theme_bw()+ theme(axis.title.x = element_blank(), axis.text.x = element_blank()) + theme(axis.ticks.length.x = unit(0, "cm")) + theme(plot.margin = unit(c(0,0,0,0), "cm")) GRAVIM <- barmekko(plotq, product, D, revenue, color = "black")+ scale_fill_manual(values = c("#8DFF47","#FF9BB1","#FF974C","#F1FF54","#BFFAFF"))+ scale_y_reverse(expand = expansion(mult = c(0.5, 0))) + theme_bw() + theme(legend.position = "none") + theme(plot.margin = unit(c(0,0,0,0), "cm")) ggarrange(NUMER, GRAVIM, nrow = 2)
方法2:修改已生成的ggplot对象图层
如果需要在已生成的图表上修改,可以通过ggplot_build和ggplot_gtable调整图层数据:
# 以NUMER为例修改轮廓颜色 NUMER_build <- ggplot_build(NUMER) # 给第一个图层(geom_rect的数据)添加黑色轮廓 NUMER_build$data[[1]]$colour <- "black" # 重新生成ggplot对象 NUMER <- ggplot_gtable(NUMER_build) # 对GRAVIM执行同样操作 GRAVIM_build <- ggplot_build(GRAVIM) GRAVIM_build$data[[1]]$colour <- "black" GRAVIM <- ggplot_gtable(GRAVIM_build) ggarrange(NUMER, GRAVIM, nrow = 2)
效果说明
两种方法都能为mekko图的每个矩形条添加黑色轮廓,解决之前添加geom_bar/geom_col无效的问题。
内容的提问来源于stack exchange,提问作者Daniel Garnique
相关产品推荐
相关产品推荐

