gpt4 book ai didi

r - 使用 Facet Grid 在 Y 轴上显示嵌套/多级类别

转载 作者:行者123 更新时间:2023-12-04 15:37:42 25 4
gpt4 key购买 nike

我是论坛的新手,但已经阅读了很多书并感谢所有专业知识。我有一个关于使用 facetgrid 将两个级别的分类变量添加到 ggplot2 图的 y 轴的问题。

特别是 - 我正在尝试弄清楚如何在我的图表的 Y 轴上直接在特定类别名称上方显示我的方面

到目前为止,我已经能够将它们添加进去,但它们必须存在于轴之外。没有允许我沿轴放置值的 strip 放置选项,它们必须在外部/内部等。使用 hjust 不起作用,因为 strip 文本被切断。我已经研究过可能将其创建为 grob 以关闭剪裁,但这看起来真的很乱而且超出了我的舒适范围。

enter image description here

理想情况下,粗体值应直接位于轴上。

代码示例如下,leg_summary$group 变量是高阶(更一般的)分类,leg_summary$name 是 Y 轴的低阶分类。

我已经尝试过使用交互而不是面网格,它看起来像:ggplot(aes(xmin=-.10, xmax = .20, x=Estimate, y=interaction(group, name, lex.order = TRUE)))

这没问题,但不是我想要的。

我已经阅读了很多其他主题,包括 ggplot `facet_grid` label cut off Multi-row x-axis labels in ggplot line chart

这是我当前的图形代码:

library(ggplot2)
library(tidyverse)
leg_graph_test <-
leg_summary %>%
filter(name!="Intercept") %>%
ggplot(aes(xmin=-.10*100, xmax = .20*100, x=Estimate*100, y=name)) +
geom_point (shape=1) +
geom_errorbarh(aes(xmax= upper.95*100, xmin = lower.95*100), height = .00000000000001) +
labs(x= "Legislators") +
geom_vline(xintercept = 0, lty = "longdash") +
theme(axis.title.y=element_blank()) +
facet_grid(group ~ .,
scales = "free_y",
switch = "y"
) +
theme_classic() +
theme(panel.spacing = unit(0, "cm"),
axis.title.y = element_blank(),
strip.background = element_blank(),
strip.placement = "outside" ,
strip.text.y = element_text(face = "bold", angle=180, vjust = 1)
) +
ggtitle("Plot 1") +
labs(x= "Legislator")

这是数据集前几行的输出文件

structure(list(Estimate = c(0.1784, 0.073, 0.0619, 0.1367, 0.1795, 
0.087), name = structure(c(1L, 6L, 5L, 4L, 3L, 2L), .Label = c("Intercept",
"Doctor spouse", "8 years experience", "3 years experience",
"1 year experience", "Female"), class = "factor"), group = structure(c(1L,
2L, 3L, 3L, 3L, 4L), .Label = c("Intercept", "Male to", "0 Years Experience to",
"No Spouse to"), class = "factor"), upper.95 = c(0.209, 0.0899,
0.0858, 0.1606, 0.2034, 0.1077), lower.95 = c(0.1478, 0.0561,
0.038, 0.1129, 0.1556, 0.0662), resp_type = c("Legislator", "Legislator",
"Legislator", "Legislator", "Legislator", "Legislator")), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))

任何帮助都会很棒!

最佳答案

如果你不想操纵 grobs,你将不得不滥用 geom_text 我认为:

leg_summary2 <- filter(leg_summary, name != "Intercept")

grps <- leg_summary2 %>%
filter(name != "Intercept") %>%
group_by(group) %>%
mutate(n = n()) %>%
slice(n())

ggplot(leg_summary2, aes(Estimate*100, forcats::fct_inorder(droplevels(name)))) +
ggstance::geom_pointrangeh(aes(xmin = lower.95*100, xmax = upper.95*100)) +
geom_text(aes(x = 3, y = n + 0.5, label = group), data = grps, hjust = 1) +
facet_grid(group ~ ., scales = "free_y", switch = "y", space = 'free') +
coord_cartesian(xlim = c(4, 21), clip = 'off') +
labs(y = NULL) +
theme_classic() +
theme(
panel.spacing = unit(0, "cm"),
strip.text.y = element_blank(),
plot.margin = margin(30, 30, 30, 60)
)

enter image description here

关于r - 使用 Facet Grid 在 Y 轴上显示嵌套/多级类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59184146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com