R语言 ggplot2使用预定义标签创建自定义专题

xwmevbvl  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(151)

我有一个非常简单的问题,但在网上没有找到答案。我甚至不确定这个功能是否存在于ggplot2中。
对于不同类型的图,我通常创建主题,因此每次使用不同的数据重新生成图时,我不必键入所有内容。
代码可能如下所示:

theme_UMAP <- function(x){
theme(...,
            legend.key = element_rect(colour = NA),
            legend.position = "bottom",
            legend.direction = "horizontal",
            legend.key.size= unit(0.8, "cm"),
            legend.spacing = unit(0, "cm"),
            legend.title = element_text(face="bold",size=15),
            legend.text = element_text(size=14),
            plot.margin=unit(c(2,1,1,1),"mm"),
            strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"),
            strip.text = element_text(face="bold")}

对于这个特定的主题,我知道X标签 * 总是 * 为 * UMAP 1 *,Y标签 * 总是 * 为 * UMAP 2 *。我希望通过以下方式将其包含在函数中:

theme_UMAP <- function(x){
theme(...,
            legend.spacing = unit(0, "cm"),
            legend.title = element_text(face="bold",size=15),
            legend.text = element_text(size=14),
            plot.margin=unit(c(2,1,1,1),"mm"),
            strip.background=element_rect(colour="#f0f0f0",fill="#f0f0f0"),
            strip.text = element_text(face="bold")+
xlab("UMAP 1")+
ylab("UMAP 2")}

但是,这会导致以下错误:

Error:
! Theme element `x` is not defined in the element hierarchy.

任何想法如何实现我正在努力做的是非常赞赏!
干杯!

vc9ivgsu

vc9ivgsu1#

代码的第一个问题是将x/ylab放在了theme中,第二个问题是,如果要将多个层放在函数中,请使用list
使用基于mtcars的最小示例:

library(ggplot2)

theme_UMAP <- function(x) {
  list(
    theme(
      legend.spacing = unit(0, "cm"),
      legend.title = element_text(face = "bold", size = 15),
      legend.text = element_text(size = 14),
      plot.margin = unit(c(2, 1, 1, 1), "mm"),
      strip.background = element_rect(colour = "#f0f0f0", fill = "#f0f0f0"),
      strip.text = element_text(face = "bold")
    ),
    xlab("UMAP 1"),
    ylab("UMAP 2")
  )
}

ggplot(mtcars, aes(hp, mpg)) +
  geom_point() +
  theme_UMAP()

相关问题