微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 facet_nested_wrap GGPLOT 将因子绘制到多行

如何解决使用 facet_nested_wrap GGPLOT 将因子绘制到多行

我想就 facet_nested_wrap 争论寻求您的帮助。

让我先描述一下我的数据。

我正在使用 TRACE 贿赂风险矩阵及其 4 个域和 9 个子域。

  • 领域:“机会”、“威慑”、“透明度”、“监督”。

  • 子域:“互动”、“期望”、“杠杆”、“劝阻”、“执法”、“流程”、“利益”、“新闻自由”、“公民社会”。

“机会”有 3 个子域:“交互”、“期望”、“杠杆”。

“威慑”有 2 个子域:“劝阻”、“执法”。

“透明度”有 2 个子域:“流程”、“兴趣”。

“监督”有 2 个子域:“新闻自由”、“公民社会”。

函数 facet_nested_wrap 可以在包 ggh4x 中找到,可以从 GitHub 安装

devtools::install_github('teunbrand/ggh4x')

我做了下图:

library(dplyr)
library(ggh4x)

df <- data.frame(

scope = c("GPFG","GPFG","ABP","ABP"),value = c(18.69760,25.15200,30.54616,34.35660,28.47889,18.44293,16.99592,19.10984,22.32335,20.00916,28.66086,30.22386,37.56469,31.69484,20.42255,18.80105,23.36370,25.05658),domain = c("Opportunity","Opportunity","Deterrence","Transparency","Oversight","Oversight"),subdomain = c("Interaction","Expectation","Leverage","dissuasion","Enforcement","Processes","Interests","Free press","Civil society","Interaction","Civil society")
) 

df %>%
  ggplot(aes(x= as.numeric(value),y= reorder(domain,-value),fill = scope)) + 
  geom_col(colour = "black",width= 0.6,position = position_dodge(width= 0.8)) + 
  theme_bw() + 
  coord_flip() + 
  geom_text(aes(label = round(value,1)),vjust=-0.5,color="black",size=3.5,position = position_dodge(0.8)) + 
  labs(title = "Weighted risk scores per portfolio",x = "",y = "",fill = NULL) + 
  theme(legend.position = "bottom",axis.text.y = element_text(size = 12),plot.title = element_text(hjust = 0.5,size = 22),axis.ticks.x = element_blank(),axis.text.x = element_blank(),strip.text.x = element_text(size = 14),legend.text = element_text(size = 16)) + 
  facet_nested_wrap(vars(domain,subdomain),scales = "free") + 
  expand_limits(x=c(0,50))

绘图时,我希望将 4 个域的面除以 4 行。现在我只有 3 个,域在某种程度上被“切割”了一半(域“监督”在第一行,与“机会”一起)。

我想将第一个域“机会”绘制为第一行,将第二个域“监督”绘制为第二行,依此类推。问题是“机会”有 3 个子域,而其余的只有 2 个。

我查看了 bleed 参数,但无法正常工作 :( https://rdrr.io/github/teunbrand/ggh4x/man/facet_nested_wrap.html

有人可以帮我吗? 提前致谢

解决方法

facet_nested_wrap() 函数主要重构条带,这意味着如果您无法在 facet_wrap() 中正确获得布局,那么在 facet_nested_wrap() 中也不会正确。这也在文档的详细信息部分中写道:“此功能仅合并通过常规 facet_wrap() 布局行为出现的同一行或列中的条带”。也就是说,一种补救措施可能是用 geom_blank() 的虚拟变量填充 2 面板域的第三面板。

library(dplyr)
library(ggh4x)

df <- data.frame(
  
  scope = c("GPFG","GPFG","ABP","ABP"),value = c(18.69760,25.15200,30.54616,34.35660,28.47889,18.44293,16.99592,19.10984,22.32335,20.00916,28.66086,30.22386,37.56469,31.69484,20.42255,18.80105,23.36370,25.05658),domain = c("Opportunity","Opportunity","Deterrence","Transparency","Oversight","Oversight"),subdomain = c("Interaction","Expectation","Leverage","Dissuasion","Enforcement","Processes","Interests","Free press","Civil society","Interaction","Civil society")
) 

df %>%
  ggplot(aes(x= as.numeric(value),y= reorder(domain,-value),fill = scope)) + 
  geom_col(colour = "black",width= 0.6,position = position_dodge(width= 0.8)) + 
  geom_blank(
    data = data.frame(
      domain = c("Deterrence","Transparency"),subdomain = "z"
    ),inherit.aes = FALSE
  ) +
  theme_bw() + 
  coord_flip() + 
  geom_text(aes(label = round(value,1)),vjust=-0.5,color="black",size=3.5,position = position_dodge(0.8)) + 
  labs(title = "Weighted risk scores per portfolio",x = "",y = "",fill = NULL) + 
  theme(legend.position = "bottom",axis.text.y = element_text(size = 12),plot.title = element_text(hjust = 0.5,size = 22),axis.ticks.x = element_blank(),axis.text.x = element_blank(),strip.text.x = element_text(size = 14),legend.text = element_text(size = 16)) + 
  facet_nested_wrap(vars(domain,subdomain),scales = "free",ncol = 3) + 
  expand_limits(x=c(0,50))

reprex package (v1.0.0) 于 2021 年 2 月 18 日创建

附带说明:“出血”论点是关于条带以及它们如何合并的,但也许文档可以更清楚地说明这一点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。