我想在直方图下放一个boxplot
。我已经想出了如何做到这一点,但boxplot
和直方图的大小相同,我想缩小boxplot
。
当我减小宽度时,边缘的空间保持不变。但是,我想减少整个事物的宽度。
以下是我目前的情况:
library(ggplot2)
h = ggplot(mtcars, aes(x=hp)) +
geom_histogram(aes(y = ..density..)) +
scale_x_continuous(breaks=c(100, 200, 300), limits=c(0,400)) +
geom_density(, linetype="dotted")
b <- ggplot(mtcars,aes(x=factor(0),hp))+geom_boxplot(width=0.1) +
coord_flip(ylim=c(0,400)) +
scale_y_continuous(breaks=c(100, 200, 300)) +
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank())
library(gridExtra)
plots <- list(h, b)
grobs <- list()
widths <- list()
for (i in 1:length(plots)){
grobs[[i]] <- ggplotGrob(plots[[i]])
widths[[i]] <- grobs[[i]]$widths[2:5]
}
maxwidth <- do.call(grid::unit.pmax, widths)
for (i in 1:length(grobs)){
grobs[[i]]$widths[2:5] <- as.list(maxwidth)
}
do.call("grid.arrange", c(grobs, ncol=1))
修改
如果我像这样使用grid.arrange():
grid.arrange(heights=c(4,1), h, b)
比例与我想要的完全一样,但我无法弄清楚如何调整上面的第一个例子,以便轴再次对齐。
任何?
答案 0 :(得分:1)
您只需在grid.arrange
来电中使用经过宽度校正的凹凸,而不是原始图。
grid.arrange(heights = c(4, 1), grobs[[1]], grobs[[2]])