gpt4 book ai didi

r - 在 ggplot2 中正确格式化两行标题

转载 作者:行者123 更新时间:2023-12-02 18:16:02 26 4
gpt4 key购买 nike

我正在开发一个自定义函数,可以向绘图添加两行标题,并且无论用户选择输入什么( "character""expression" ),我都希望标题格式正确。我在下面创建了一个玩具示例来说明该函数当前实现方式的两个问题 -

  1. 当标题不是 NULL 时,两条线没有对齐正确的。
  2. 当输入一个表达式时,连接的标题就完整了损坏了。

编辑:

如果您有实现相同目标的不同解决方案(如果用户提供的 captionNULL ,则默认的单行表达式将打印为标题,否则将两行表达式打印为标题),我对此也持开放态度。

尽管对象的类仍然是"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于2018年8月22日创建(v0.2.0.9000)。

最佳答案

调整链接问题的答案,

library(gridExtra)
library(grid)
library(ggplot2)

element_custom <- function() {
structure(list(), class = c("element_custom", "element_text"))
}

element_grob.element_custom <- function(element, label="", ...) {

mytheme <- ttheme_minimal(core = list(fg_params = list(parse=TRUE,
hjust=0, x=0)))
disect <- strsplit(label, "\\n")[[1]]
tg <- tableGrob(as.matrix(disect), theme=mytheme)
tg$vp = viewport(just=1,x=1, width = sum(tg$widths))
tg
}

heightDetails.gtable <- function(x) sum(x$heights)

ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
geom_line() +
labs(x= "italic('Note')*': this is mtcars'\n 'in favour of null: '*log[10](bf['01'])=='123'")+
(theme_grey() %+replace% theme(axis.title.x = element_custom()))

关于r - 在 ggplot2 中正确格式化两行标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51976537/

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