7

哪个属性(如果有)ggplot控制轴文本
宽度(或空格量)?


在下面的示例中,我的最终目标是“推入”顶部图表的左侧,使其与底部图表对齐。

我试过theme(plot.margin=..)了,但这会影响整个情节的边缘。
facet'ing 也无济于事,因为 y 上的比例不同。

作为最后的手段,我意识到我可以修改轴文本本身,但是我还需要计算每个图形的切割。

在此处输入图像描述

可重现的例子:

library(ggplot2)
library(scales)

D <- data.frame(x=LETTERS[1:5],  y1=1:5, y2=1:5 * 10^6)

P.base <- ggplot(data=D, aes(x=x)) + 
            scale_y_continuous(labels=comma)

Plots <- list(
    short = P.base + geom_bar(aes(y=y1), stat="identity", width=.5)
  , long  = P.base + geom_bar(aes(y=y2), stat="identity", width=.5) 
  )

do.call(grid.arrange, c(Plots, ncol=1, main="Sample Plots"))
4

1 回答 1

9

这是一种解决方案。

这个想法是从“在 2x1 平面上使用水平而不是垂直标签并拆分 y-label 定义一个函数”

align_plots1 <- function (...) {
    pl <- list(...)
    stopifnot(do.call(all, lapply(pl, inherits, "gg")))
    gl <- lapply(pl, ggplotGrob)
    bind2 <- function(x, y) gtable:::rbind_gtable(x, y, "first")
    combined <- Reduce(bind2, gl[-1], gl[[1]])
    wl <- lapply(gl, "[[", "widths")
    combined$widths <- do.call(grid::unit.pmax, wl)
    grid::grid.newpage()
    grid::grid.draw(combined)
}

short <- P.base + geom_bar(aes(y=y1), stat="identity", width=.5)
long <- P.base + geom_bar(aes(y=y2), stat="identity", width=.5) 

#Now, align the plots
align_plots1(short, long)

这是输出。

在此处输入图像描述

于 2014-03-10T04:26:38.683 回答