gpt4 book ai didi

r - 当 plot.margin 存在 ggplot2 时,标题对齐

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

我想将标题向右推,但包括添加的边距(右侧 30 毫米)。我找不到有关如何执行此操作的任何信息。使用 plot.caption = element_text(hjust = 1)theme()不起作用。如果可能,我想要纯 ggplot2 解决方案。它需要在任何情节中工作(不同的 x 限制不仅在这个情节中)。

library(tibble)
library(ggplot2)
library(dplyr)

tibble(x = letters[1:4], n = 10*1:4, lab = " long thus margin") %>%
ggplot(aes(reorder(x, n), n)) +
geom_bar(stat = "identity") +
geom_text(aes(label = lab), hjust = -0.1) +
coord_flip(clip = "off") +
labs(caption = "This is caption") +
theme_minimal() +
theme(plot.margin = unit(c(0, 30, 0, 0), "mm"))

enter image description here

编辑:

目标是实现这个情节:

enter image description here

最佳答案

您可以在绘制绘图之前修改标题的 grob 位置。 (这在技术上是一个纯粹的 ggplot2 解决方案,因为 grob-hacking 是在绘制 ggplot 对象的正常过程中完成的。)

黑客

在控制台中运行以下行:

trace(ggplot2:::ggplot_gtable.ggplot_built, edit = TRUE)

应该会出现一个弹出窗口,显示被跟踪函数的实际代码:
function (data) 
{
plot <- data$plot
...
plot_table$grobs <- plot_table$grobs[c(nrow(plot_table$layout),
1:(nrow(plot_table$layout) - 1))]
}
plot_table
}

插入 plot_table$layout[which(plot_table$layout$name == "caption"), "r"] <- dim(plot_table)[2]作为 plot_table 之前的新行,最后:
function (data) 
{
plot <- data$plot
...
plot_table$grobs <- plot_table$grobs[c(nrow(plot_table$layout),
1:(nrow(plot_table$layout) - 1))]
}
plot_table$layout[which(plot_table$layout$name == "caption"), "r"] <- dim(plot_table)[2] # new
plot_table
}

对于本 R session 的其余部分,您绘制的任何 ggplot 中的任何标题都将一直对齐到绘图背景区域的右侧,而不是绘图面板。 (此效果不会在新 session 中持续存在;如果需要,请重复上述步骤。)

逆转黑客

如果您希望在当前 R session 中停止效果,请在控制台中运行以下行:
untrace(ggplot2:::ggplot_gtable.ggplot_built)

任何 ggplot 中的任何标题现在都将再次与绘图面板右对齐。

关于r - 当 plot.margin 存在 ggplot2 时,标题对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57631019/

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