Reputation: 381
How make matching X-axis in histogram with marginal boxplot?
data <- rnorm(1000)
nf <- layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,3))
layout.show(nf)
par(mar=c(5.1, 4.1, 1.1, 2.1))
boxplot(data, horizontal=TRUE, outline=FALSE)
hist(data)
Upvotes: 5
Views: 10881
Reputation: 328
Using ggplot and grid package.
library(gridExtra)
library(ggplot2)
library(grid)
p1 = ggplot(aes(x = mpg), data = mtcars) +
geom_histogram(fill = "lightblue", color = "black",binwidth = 1) +
scale_x_continuous(limits = c((min(mtcars$mpg)),(max(mtcars$mpg))),
breaks = pretty(mtcars$mpg, n = 10)) +
labs(x = "", y = "Count", title = ("Histogram & Boxplot of mpg"))
p2 = ggplot(aes(x = "", y = mpg), data = mtcars) +
stat_boxplot(geom ='errorbar', width = 0.4) +
geom_boxplot(outlier.colour = "red") +
coord_flip() +
scale_y_continuous(limits = c((min(mtcars$mpg)),(max(mtcars$mpg))),
breaks = pretty(mtcars$mpg, n = 10)) +
stat_summary(fun.y = mean, colour = "purple", geom = "point",
shape = 18, size = 3) +
labs(x = "", y = "mpg")
grid.draw(rbind(ggplotGrob(p1), ggplotGrob(p2), size = "first"))
Upvotes: 1
Reputation: 98489
One solution would be to set ylim=
in boxplot()
to the same range as xlim=
in hist()
.
set.seed(123)
data <- rnorm(1000)
nf <- layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(1,3))
par(mar=c(5.1, 4.1, 1.1, 2.1))
boxplot(data, horizontal=TRUE, outline=FALSE,ylim=c(-4,4))
hist(data,xlim=c(-4,4))
Upvotes: 11