【R语言】facet并不包含全部level的处理, 不同facet调节ylim,ggarrange合并两个ggplot保留配色,并且使用全部水平legend

今天遇到一个复杂的画图任务
先看最终效果图
在这里插入图片描述
其实这是左右两张ggplot合并的结果。注意两张图有两个共有水平(红色,蓝色),但每个图不完全包含全部四个水平。最后legend出要有全部4个水平。

如果使用简单的facet_grid,结果如下
在这里插入图片描述
每张图会余留一个空缺位置,达不到想要的效果。核心思路是画两个ggplot,再用ggarrange合并。需要注意的是,本人很久没用R了,不知道是ggplot2更新了思路了还是咋的,用p<- ggplot(…) + geom_box(…)一直不能成功,只有用ggboxplot(…)才能成功。下面介绍具体方法

第一步获取公共legend

在这一步就简单把所有水平都一起画个图,然后调整legend到自己想要的样子,之后ggarrange会直接把legend部分抠图粘贴上去。

library(ggpubr)
dat_cp_1 =fread('icmodel_2022-11-02method(25)N50_1d.csv')
dat_cp_2 =fread('icmodel_2022-11-02method(23)N50_1d.csv')

dat_cp_1$init <- factor(dat_cp_1$init, levels = c('best_model', 'true_change_points','random_cp_K2'),
                        labels = c('Best Model', 'Oracle Change Point', 'Random Change Point'))
dat_cp_2$init <- factor(dat_cp_2$init, levels = c('best_model', 'true_change_points','no_change_points'),
                        labels = c('Best Model', 'Oracle Change Point', 'No Change Point'))
dat_cp = rbind(dat_cp_1, dat_cp_2)
dat_cp$Setting <- factor(dat_cp$Setting,levels = c('pwconst2', 'smooth'),
                         labels = c('Piecewise Constant', 'Smooth'))
dat_cp$compare = rep(c('setting1', 'setting2'), each = dim(dat_cp_1)[1])
dat_cp_processed <- gather(dat_cp, metric, value, -c('Setting', 'seed', 'init','compare'))
dat_cp_processed$metric=factor(dat_cp_processed$metric, levels = c('cp_err', 'ARI'),
                               labels =  c('CP Error', 'ARI'))
cbPalette=c('#cc0c00', '#5c88da','#84bd00', '#ffcc00', '#7c878e','#00b5e2','#00af66',"#E69F00","#660099")

p2 &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值