Cowplot:如何在边缘图中添加刻度线和相应的数据标签?

时间:2017-12-15 13:04:16

标签: r plot ggplot2 cowplot

  

R套餐:cowplot / ggplot2

     

用例:带边缘直方图的散点图。

     

问题:对于直方图,我无法添加bin大小或引用lower / upper   x轴上的类间隔。没有这些直方图是困难的   阅读。

     

在牛皮图中,有没有办法添加刻度线和相应的数据   必要时,标签(在x轴上)到边缘图?例如。对于   边缘图中的直方图

使用cowplot

的基本散点+边缘直方图
require(ggplot2)
require(cowplot)

主要情节:

pmain <- ggplot(data = mpg, aes(x = cty, y = hwy)) + 
  geom_point() +
  xlab("City driving") +
  ylab("Highway driving") + 
  theme_grey()

边缘情节:

xbox <- axis_canvas(pmain, axis = "x") + 
  geom_histogram(
    data = mpg,
    aes(x = cty),
    colour = "black"
  )

组合图:

p1 <- insert_xaxis_grob(pmain, xbox, grid::unit(0.5, "in"), position = "top")

ggdraw(p1)

javadoc

但是,我希望以下情节xbox2显示为x轴边缘图:

xbox2.1 <- ggplot() + 
  geom_histogram(
    data = mpg,
    aes(x = cty),
    colour = "black"
  )
hist_tab <- ggplot_build(xbox2.1)$data[[1]]

xbox2 <- xbox2.1 +
  scale_x_continuous(
    breaks = c(round(hist_tab$xmin,1),
               round(hist_tab$xmax[length(hist_tab$xmax)],1))
  ) +
  labs(x = NULL, y = NULL) + 
  theme(
    axis.text.x = element_text(angle = 90, size=7,vjust=0.5),
    axis.line = element_blank(),
    axis.text.y=element_blank(),
    axis.ticks.y=element_blank()
  )

xbox2

Output-1

但是我无法创建分散+边缘直方图(xbox2)。我得到与第一个相同的情节:

p2 <- insert_xaxis_grob(pmain, xbox2, grid::unit(0.5, "in"), position = "top")
ggdraw(p2)

Output-2

1 个答案:

答案 0 :(得分:2)

包裹作者在这里。您所看到的是记录在案的行为。来自grob的{​​{1}}参数的文档:

  

要插入的grob。这通常是通过insert_xaxis_grob()来自get_panel()对象获得的,特别是使用ggplot2生成的对象。如果提供axis_canvas()图而不是grob,则调用ggplot2来提取面板grob。

此功能特别不适用于堆叠图。您可以将整个绘图转换为grob然后使用此函数插入​​,但我不确定这有多大意义。您尝试做的事情相当于堆叠两个具有相同x轴范围的图。我认为最好只是明确地对它进行编码。

get_panel()

enter image description here