gpt4 book ai didi

r - 将 tableGrob 与 ggplot2 y 轴并列

转载 作者:行者123 更新时间:2023-12-04 10:08:01 24 4
gpt4 key购买 nike

有没有一种优雅的方法可以将 tableGrob 行与轴中断对齐?

我想在 R 中并列一个 tableGrob 和 ggplot 图表(我需要重现以前版本的公共(public)报告中使用的一些 SAS 输出)。就像这个最小的可重现示例:

juxtaposed tableGrob and ggplot chart

This post让我走得很远 --- tableGrob 与图表主体在同一 gtable 行中;但是,它需要大量手动操作才能使 tableGrob 中的行与轴标签对齐。

我还找到了this post .由于我正在编写一份公开报告,因此我不希望使用 CRAN 包中不易获得的代码。话虽如此,tableGrob 的实验版本似乎接受高度作为参数。如果这段代码可以解决问题,并且我确实选择使用这个实验版本,我将如何计算适当的行高?

如果没有一种优雅的方式来做到这一点,我发现这些技巧很有帮助:

  • 在 tableGrob 中设置 fontsize 和 cex 以匹配 ggplot2
  • 将 padding.v 设置为 tableGrob
  • 中的空间表行
  • 修改坐标限制以适应列标签并与最后一行的底部对齐

  • 我的 MRE 代码:
    library(ggplot2)
    library(gridExtra)
    library(gtable)

    theme_set(theme_bw(base_size = 8))
    df <- head(mtcars,10)
    df$cars <- row.names(df)
    df$cars <- factor(df$cars, levels=df$cars[order(df$disp, decreasing=TRUE)], ordered=TRUE)
    p <- ggplot(data=df, aes(x=hp, y=cars)) +
    geom_point(aes(x=hp, y=cars)) +
    scale_y_discrete(limits=levels(df$cars))+
    theme(axis.title.y = element_blank()) +
    coord_cartesian(ylim=c(0.5,length(df$cars)+1.5))
    t <- tableGrob(df[,c("mpg","cyl","disp","cars")],
    cols=c("mpg","cyl","disp","cars"),
    gpar.coretext = gpar(fontsize = 8, lineheight = 1, cex = 0.8),
    gpar.coltext = gpar(fontsize = 8, lineheight = 1, cex = 0.8),
    show.rownames = FALSE,
    show.colnames = TRUE,
    equal.height = TRUE,
    padding.v = unit(1.65, "mm"))
    g <- NULL
    g <- ggplotGrob(p)
    g <- gtable_add_cols(g, unit(2,"in"), 0)
    g <- gtable_add_grob(g, t, t=3, b=3, l=1, r=1)

    png('./a.png', width = 5, height = 2, units = "in", res = 100)
    grid.draw(g)
    dev.off()

    出于故障排除目的,我已将汽车名称留在 y 轴中断处,但最终我将删除它们。

    最佳答案

    现在有 gtable_table 的实验版本

    enter image description here

    table <- gtable_table(df[,c("mpg","cyl","disp","cars")], 
    heights = unit(rep(1,nrow(df)), "null"))

    g <- ggplotGrob(p)
    g <- gtable_add_cols(g, sum(table$widths), 0)
    g <- gtable_add_grob(g, table, t=3, b=3, l=1, r=1)

    grid.newpage()
    grid.draw(g)

    关于r - 将 tableGrob 与 ggplot2 y 轴并列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21392555/

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