2

是否可以使用因子变量来刻画 R 中 ggplot2 中散点图下方或旁边的直方图(这样直方图是数据的 x 和 y 分量)?

我问这是否可以使用因子变量完成的原因是因为 faceting 似乎比解决此问题的可用包更通用,例如,使用 faceting,可以打开或关闭 facet 标签,并且 faceting 有一个更标准的外观,出版可能是一个问题。(默认情况下,Faceting 也保留使用相同的轴)。

到目前为止,我还不能让它工作,因为似乎所有多面数据都必须具有相同的维数(例如,散点图数据是二维的,直方图数据是一维的)。

4

3 回答 3

1

我不确定我是否完全理解这个问题,因为因子变量的直方图对我来说不太有意义。此外,如果没有样本数据,我只需要使用mtcars. 这样的事情可能会有所帮助。为了使绘图具有自定义网格排列,我使用grid.extra除了。ggplot2

library(gridExtra)
library(ggplot2)


s_plot <- ggplot(data = mtcars, aes(x = hp, y = mpg)) + geom_point()

h1 <- ggplot(data = mtcars, aes(x = hp)) + geom_histogram()

h2 <- ggplot(data = mtcars, aes(x = mpg)) + geom_histogram()

grid.arrange(s_plot, h1, h2, layout_matrix = cbind(c(1, 1), c(2, 3)))

在此处输入图像描述

请注意,在 中的layout_matrix参数中grid.arrange,我之所以使用,cbind(c(1,1), c(2, 3))是因为我希望第一个图单独位于一列中,然后我希望其他两个图占据网格第二列中的各个行。

于 2017-06-05T12:47:33.413 回答
1

尼克和布莱恩,

感谢您对代码的帮助。我四处打听,并能够得到我正在寻找的设置。基本上是这样的,如下图。(希望这对您和其他人将来可能有用,因为我认为这是一种常见的图表类型):

rm(list = ls())
library(ggplot2)
library(gridExtra)

df <- data.frame(
  x = rnorm(100),
  y = rnorm(100)
)

xrange <- range(pretty(df$x))
yrange <- range(pretty(df$y))

p.left <- ggplot(df, aes(y)) +
  geom_histogram() +
  lims(x = yrange) +
  coord_flip() +
  theme_light() +
  theme(
    axis.title.x = element_blank(),
    axis.text.x = element_blank(),
    axis.ticks.x = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.margin = unit(c(1, 0.05, 0.05, 1), "lines")
  )

p.blank <- ggplot() +
  theme_void() +
  theme(plot.margin = unit(rep(0, 4), "lines"))

p.main <- ggplot(df, aes(x, y)) +
  geom_point() +
  lims(x = xrange, y = yrange) +
  theme_light() +
  theme(
    axis.title = element_blank(),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    plot.margin = unit(c(1, 1, 0.05, 0.05), "lines")
  )

p.bottom <- ggplot(df, aes(x)) +
  geom_histogram() +
  lims(x = xrange) +
  theme_light() +
  theme(
    axis.title.y = element_blank(),
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank(),
    panel.grid.major.y = element_blank(),
    plot.margin = unit(c(0.05, 1, 1, 0.05), "lines")
  )

lm <- matrix(1:4, nrow = 2)

grid.arrange(
  p.left, p.blank, p.main, p.bottom,
  layout_matrix = lm,
  widths = c(1, 5),
  heights = c(5, 1),
  padding = unit(0.1, "line")
)

带有数据 x 和 y 分量直方图的散点图。

于 2017-06-11T09:01:37.773 回答
1

考虑使用geom_rug.

ggplot(mtcars, aes(wt, mpg)) +
  geom_point() + geom_rug()

在此处输入图像描述

于 2017-06-05T13:23:04.683 回答