r - 将带有 facet_grid 的 ggplot2 对象的标题移到中间

标签 r ggplot2 facet-grid

我有以下数据框:

              ML Algorithm Option  Coeff  Lower  Upper
1  Random Forest    Algo_1  Opt_1  0.021 -0.124  0.166
2          Lasso    Algo_1  Opt_1  0.130 -0.012  0.273
3        XGBoost    Algo_1  Opt_1 -0.052 -0.211  0.108
4     Neural Net    Algo_1  Opt_1  0.114 -0.009  0.238
5  Random Forest    Algo_1  Opt_2  0.116 -0.033  0.264
6          Lasso    Algo_1  Opt_2  0.158  0.019  0.297
7        XGBoost    Algo_1  Opt_2 -0.260 -0.508 -0.012
8     Neural Net    Algo_1  Opt_2  0.035 -0.100  0.170
9  Random Forest    Algo_2  Opt_1  0.028 -0.117  0.172
10         Lasso    Algo_2  Opt_1  0.134 -0.008  0.277
11       XGBoost    Algo_2  Opt_1 -0.054 -0.214  0.106
12    Neural Net    Algo_2  Opt_1  0.118 -0.006  0.241
13 Random Forest    Algo_2  Opt_2  0.038 -0.097  0.172
14         Lasso    Algo_2  Opt_2  0.133 -0.006  0.272
15       XGBoost    Algo_2  Opt_2 -0.055 -0.240  0.131
16    Neural Net    Algo_2  Opt_2  0.118 -0.007  0.242

ML 列包含四种机器学习算法(随机森林、Lasso、XGBoost、神经网络)。每个 ML 可以用两个算法(Algo_1、Algo_2)拟合,每个算法可以通过两个选项(Opt_1、Opt_2)拟合,为每个 ML 产生四个不同的系数。

我按以下方式绘制数据:

p <- ggplot(results2, aes(x = Option, y = Coeff, color = ML))+
  geom_point(size = 5)+ 
  facet_grid(.~ML+Algorithm,scales = "free_x")+
  geom_errorbar(aes(ymin = Lower, ymax = Upper, color = ML), size =1)+
  geom_hline(yintercept = 0, color = "grey", size = 1.5) +
  scale_x_discrete(guide = guide_axis(n.dodge = 2))+
  theme(panel.border = element_blank(),panel.spacing.x = unit(0,"line"))+ # Remove space between facets
  xlab("")+
  ylab("")
p

这是结果: enter image description here

问题: 1.) 如何将 ML 名称(即 Lasso、Random Forest、XGBoost、Neural Net)向右移动,使其位于相应算法(即 Algo_1 和 Algo_2)之上和之间,以便每个 ML 名称仅出现一次并且不是每个算法的两倍?

2.) 如何使 ML 名称加粗?

非常感谢您的帮助。

最佳答案

如果您希望标签集中,您可以这样做:

library(ggh4x)

ggplot(results2, aes(x = Option, y = Coeff, color = ML))+
  geom_point(size = 5)+ 
  facet_nested(.~ ML + Algorithm, scales = "free_x",
               strip = strip_nested(text_x = list(
                 element_text(face = 'bold', size = 12),
                 element_text()), by_layer_x = TRUE)) +
  geom_errorbar(aes(ymin = Lower, ymax = Upper, color = ML), size =1)+
  geom_hline(yintercept = 0, color = "grey", size = 1.5) +
  scale_x_discrete(guide = guide_axis(n.dodge = 2))+
  theme(panel.border = element_blank(),panel.spacing.x = unit(0,"line"))+ 
  xlab("") +
  ylab("") 

enter image description here

关于r - 将带有 facet_grid 的 ggplot2 对象的标题移到中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73989035/

相关文章:

java - 使用 rJava 导入的静态 Java 函数不适用于 tm_map()

r - 将最常见的子串搜索到子序列中

r - 如何使用 geom_label_repel 避免图中标签重叠?

r - 无法在函数内对 ggplot 使用分面

r - facet_grid 中的多行

r - 在 R 中使用facet_grid 将 Kruskal Wallis p 值添加到箱线图中时出错

r - 对每个元素采样 n 个值

r - 如何将 geom_text 颜色映射到变量

r - ggplot2中的geom_density和base R中的density的区别

r - 使用 Expand=expansion() 时顶部主网格线的宽度发生变化 - 轴线被切断