左侧为原图,右侧有最终效果图。
1 原图代码
library(ggplot2)
g1=ggplot(mtcars, aes(mpg, wt, color=mpg))+geom_point()+
scale_color_gradient(low="white", high="red")+
theme_bw(); g1
2. 目标图代码
目前没找到 ggplot2 原生的处理方法。
只能使用ggplot2的低层 grid 包进行拆分处理。该过程不可逆,转为grob对象后,失去ggpot对象的+和回车打印等特性。
主要思路,就是把ggplot2对象拆分成基本的 grob 对象。
然后找到 color bar 所在的分支对象,创建一个等大小的矩形对象。
然后把 color bar 对象和 矩形对象合并成一个grob对象,放回到原来的位置。
然后打印整体 grob 对象。
整个过程需要反复测试,难点是找到 bar 所在图层位置。
library(grid)
# 目测对象的位置
grid.force()
grid.ls()
# bar.4-2-4-2
# 拆开ggplot2对象
q=ggplotGrob(g1)
# 测试1
grid.newpage()
bar=q$grobs[[15]]$grobs[[1]]$grobs[[2]]
grid.draw(bar)
#构建矩形对象
box=rectGrob(width=bar$width, height=bar$height, gp=gpar(col="black", lwd=3))
grid.draw(box)
grid.draw(bar)
# 合并bar+box
gplot <- gTree(
children = gList(
box,
bar
)
)
# check
grid.newpage()
grid.draw(gplot)
# setting
q$grobs[[15]]$grobs[[1]]$grobs[[2]]=gplot
# draw
grid.newpage()
grid.draw(q)
ref
- https://www.biomooc.com/