【问题标题】:Using Factor Variables to Facet a Histogram Beside a Scatter Plot in R使用因子变量在 R 中的散点图旁边刻画直方图
【发布时间】:2017-11-06 04:36:43
【问题描述】:

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

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

到目前为止,我还无法让它工作,因为似乎所有分面数据都必须具有相同的维数(例如,散点图数据是 2D,直方图数据是 1D)。

【问题讨论】:

    标签: r ggplot2 facet facet-wrap facet-grid


    【解决方案1】:

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

    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)))
    

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

    【讨论】:

    • 我想你会想要h2 &lt;- h2 + coord_flip(),并更改布局矩阵以将它们排列为左上角、右上角、左下角和右下角空白。
    【解决方案2】:

    Consider the use of geom_rug

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

    【讨论】:

      【解决方案3】:

      尼克和布莱恩,

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

      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")
      )
      

      【讨论】:

        猜你喜欢
        • 2018-08-04
        • 2015-10-23
        • 1970-01-01
        • 2020-07-23
        • 2019-12-27
        • 2019-10-23
        相关资源
        最近更新 更多