如何在图表的X 轴上缩小两个分类变量之间的间距?
我想绘制一个分类变量(有两个水平:pers_whobreaksup)与一个连续变量(avd_mc)之间的双因素交互图。
X轴上的空白太多了。无论我怎么调整都无法减少。
我在使用scale_x_continious,因为使用scale_x_discrete总是会把分类变量的标签从图中移除。
我可以把用于避免的那几条线拉得更近一些,但标签不会移动,X轴的长度保持不变
我已附上当前绘图的样子以及下面的代码。

plot_model(persconf_mean_mod1.2,
type = "pred",
terms = c("pers_whobreaks",
"avd_mc[-1.114652, 1.114652]")) +
scale_color_discrete(name = "Attachment Avoidance",
labels = c("Low", "High"))+
scale_x_continuous( labels = c("Partner Breaksup" , "You Breakup"), n.breaks = 2) +
ggtitle("")+ ylab(label = "Personal Confidence") +
xlab(label = "Initiator")+
theme_classic() +
theme(text = element_text(family = "serif"))
解决方案
你可以间接控制“留白”量,这取决于绘图本身的宽度(由你的绘图设备决定)以及每组中条形被错位的紧密程度和/或在两边添加的空白量。
设想我们有这张图,与你的一张类似。最好在提问中包含示例数据,但我认为你的问题也可以用其他数据来演示。
p <- sjPlot::plot_model(lm(mpg ~ wt + am + vs,
data = mtcars |> transform(am = factor(am))),
type = "pred", terms = c("am", "vs"))
ggsave("p.png", p, width = 4, height = 3, scale = 2)
如果把图变窄(最直接地通过调整Plot窗口的大小来实现,但更具可重复性的是使用 ggsave()),并增大dodge的比例,我们就能在每组中的条形之间获得类似的物理间距,但之间的间隔会变小。
p2 <- sjPlot::plot_model(lm(mpg ~ wt + am + vs,
data = mtcars |> transform(am = factor(am))),
type = "pred", terms = c("am", "vs"), dodge = 0.5)
ggsave("p2.png", p2, width = 2, height = 3, scale = 2)
(很恼人的是,Stack Overflow会把这张图显示得更大以填充宽度;原始文件的高度是相同的。)
如果我们想要相同的绘图尺寸,可以在两边添加填充/留白:
p3 <- sjPlot::plot_model(lm(mpg ~ wt + am + vs,
data = mtcars |> transform(am = factor(am))),
type = "pred", terms = c("am", "vs"), dodge = 0.5) +
scale_x_continuous(expand = expansion(mult = c(1, 1)))
ggsave("p3.png", p3, width = 4, height = 3, scale = 2)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。


