gpt4 book ai didi

r - 如何在ggplot facet wrap标签中使用不同的字体大小?

转载 作者:行者123 更新时间:2023-12-03 15:05:09 46 4
gpt4 key购买 nike

我想在我的 facet wrap 的标签中创建两种不同大小的文本。

例如:

  • 物种 X(尺寸 14)
  • 总捕获量 (n=133)(大小 12)


  • test <- read.csv(paste0(path, "Costello Artvgl2 for Stack.csv"), sep = ";", dec = ",", header = T)

    str(test)


    test$Wert <- factor(test$Wert, levels = c("one","two","three","four","five","six"))


    test$Sampling.site <- factor(test$Sampling.site, levels = c("Species X Area T","Species Y Area T","Species X Area A","Species Y Area B","Species X Area B","Species Y Area C"))


    levels(test$Sampling.site) <- c("Species X\nTotal catch (n=133)", "Species Y\nTotal catch (n=185)", "Species X\nSampling area A (n=57)", "Species Y\nSampling area B (n=122)",
    "Species X\nSampling area B (n=76)", "Species Y\nSampling area C (n=63)")

    theme_new <- function(base_size = 12, base_family = base_family){
    theme_bw(base_size = base_size) %+replace%
    theme(
    axis.text.x = element_text(size = 8 ),
    axis.text.y = element_text(size = 8 ),
    axis.title.x = element_text(size = 12, vjust = 0.01),
    axis.title.y = element_text(size = 12, vjust = 0.9, angle = 90),

    plot.title = element_text(size = 10, face = "bold"),

    legend.key= element_rect(colour= NA, fill =NA, size = 0.5),
    legend.key.size = unit(1, "lines"),
    legend.text = element_text(size = 8),
    legend.title = element_blank(),

    strip.background = element_rect(fill = NA, colour = NA),
    strip.text = element_text(size = 8, face = "bold",hjust = 0.5, vjust = 0.9),

    panel.background = element_rect(fill = "white"),
    panel.border = element_rect(fill = NA, colour="black"),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.margin = unit(1, "lines")

    )
    }

    ggplot(test, aes(Fi, Pi),group=Wert)+
    geom_point(aes(colour = factor(Wert),shape = factor(Wert)),size=3) +
    scale_shape_manual(values=c(20,18,19,15,16,17))+
    scale_x_continuous(limits=c(0, 1),breaks=c(0,0.2,0.4,0.6,0.8,1.0))+
    scale_colour_brewer(type = "qual", palette = "Paired")+
    scale_y_continuous(limits=c(0, 100),breaks=c(0,20,40,60,80,100))+
    labs(x = "Frequency of occurrence", y = "Prey-specific abundance [%]")+
    facet_wrap(~Sampling.site,scales = "free",ncol = 2) +
    theme_new()

    有没有可能意识到这一点?

    最佳答案

    下面的解决方案是一个技巧,因为它使用上标(或下标)来为分面标签的第二行获得较小的字体大小。我不确定如何更好地控制标签大小而不诉诸于直接操作 strip ,尽管可能有一种方法可以编写 labeller功能来做到这一点。

    我们将使用内置的 mtcars示例的数据框。首先,我们将添加将用于刻面和标记的列。我们将通过 cyl 分面,但我们希望标签的第一行显示该方面的柱面数,第二行显示该方面的数据点数。为此,我们将在 mtcars 中创建两个新列。 ,称为 Label1Label2我们将使用它来创建刻面标签的每一行。我们将通过这两列来获取我们想要的图表中的标签。 ( Label3 类似于 Label2 ,但使用下标而不是上标;这仅在您想更改从第二行底部到绘图面板顶部的距离时才重要。)
    Label1Label2是文本字符串,但它们是表达式的形式,因此我们可以使用 label_parsed在我们创建绘图时获得更小的下标文本。

    library(ggplot2)
    library(dplyr)
    library(grid)

    mtcars.new = mtcars %>% group_by(cyl) %>%
    summarise(Label1=paste0("bold(Cylinders:~", unique(cyl),")"),
    Label2=paste0("bold(NULL[Count:~", length(cyl),"])"),
    Label3=paste0("bold(NULL^{Count:~", length(cyl),"})")) %>%
    full_join(mtcars)

    现在我们可以创建情节了。刻面 Label1Label2给我们两行。因为我们为 Label2 创建了一个下标表达式,当我们使用 label_parsed 时,它会以较小的字体呈现标记方面。我更喜欢 Label2相对于 Label1 大一点,但是没有办法用这个(hacky)方法来控制它。另外,虽然 element_text有一个 lineheight争论,ggplot 似乎并不尊重它。因此,我手动重置了 strip 标签的行高以减少两个标签之间的空间。
    p = ggplot(mtcars.new, aes(wt, mpg)) +
    geom_point() +
    facet_grid(. ~ Label1 + Label2, labeller=label_parsed) +
    theme_bw() +
    theme(strip.background=element_rect(fill=NA, color=NA),
    strip.text=element_text(size=12))

    g <- ggplotGrob(p)
    g$heights[[3]] = unit(0.5,"lines")

    grid.draw(g)

    enter image description here

    关于r - 如何在ggplot facet wrap标签中使用不同的字体大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36334486/

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