【发布时间】:2019-01-29 06:52:27
【问题描述】:
我正在开发一个自定义函数,该函数可以为绘图添加两行标题,并且无论用户可能选择输入什么("character" 或"expression"),我都希望标题的格式正确。我在下面创建了一个玩具示例来说明该功能当前实现方式的两个问题-
- 当标题不是
NULL时,两行不对齐 正确的。 - 当输入一个表达式时,连接的标题得到完全 损坏。
编辑:
如果您有不同的解决方案来实现相同的目标(如果用户提供的 caption 是 NULL,则默认的单行表达式将打印为标题,否则将两行表达式打印为一个标题),我也对此持开放态度。
重要虽然对象的类仍然是 "ggplot",因为我想使用 ggplot2 函数对结果图进行进一步修改。
# needed libraries
library(ggplot2)
# custom function to prepare a caption
caption_maker <- function(caption) {
# if caption is not null then add line separator
if (!is.null(caption)) {
caption <- paste(caption, "; \n", sep = "")
}
# prepare the caption with additional info
caption <- base::substitute(
expr =
paste(
y,
"In favor of null: ",
"log"["e"],
"(BF"["01"],
") = ",
bf
),
env = base::list(
y = caption,
bf = 123
)
)
# return the message
return(caption)
}
# custom function to add labels to the plot
plot_maker <-
function(xlab = NULL,
ylab = NULL,
title = NULL,
caption = NULL) {
caption.text <- caption_maker(caption = caption)
plot <- ggplot(mtcars, aes(wt, mpg)) + geom_point() +
ggplot2::labs(
x = xlab,
y = ylab,
title = title,
caption = caption.text
)
# return the plot
return(plot)
}
# this works just fine
plot_maker(caption = NULL)
# this works but the caption is not aligned properly
plot_maker(caption = "This is mtcars dataset")
# this works but the caption is all mangled
plot_maker(
caption =
expression(paste(italic("Note"), ": This is mtcars dataset"))
)
由reprex package (v0.2.0.9000) 于 2018 年 8 月 22 日创建。
【问题讨论】:
-
是的,使用
atop效果很好,但它确实使文本居中,而不是右对齐。顺便说一句,这是因为不支持多行表达式。 -
@mike-badescu,正如 Axeman 所说,该解决方案对我不起作用,因为这两行的格式仍然不符合我的喜好。