使用ggplot2进行多面板绘制?

时间:2019-01-25 22:48:04

标签: r ggplot2

我的条形图上刻有股票代号名称:

barchart-by-symbol

我希望能够在每个图下方添加一个指标的小“子图”,如下所示:

enter image description here

ggplot2是否可能?我想到了辅助轴,但是大多数情况下,主绘图轴和指标轴之间没有线性关系(因此,不能使用sec_axis

谢谢!

1 个答案:

答案 0 :(得分:1)

由于这些图显然是不同类型的图,所以我认为您最好创建单独的图,然后将它们渲染在一起。这是使用cowplot软件包的一种解决方案:

library(ggplot2)
library(cowplot)

#sample data
df <- data.frame(x = 1:100, y = cumsum(rnorm(100)), volume = sample(1:10, 100, replace = TRUE))
p1 <- ggplot(df, aes(x,y)) +
  geom_line()
p2 <- ggplot(df, aes(x,volume)) +
  geom_bar(stat = "identity")

plot_grid(p1, p2, align = "v", ncol = 1, rel_heights = c(.8, .2))

reprex package(v0.2.1)于2019-01-25创建

编辑

继续在这个笨拙的示例上进行构建以支持构面的概念。忽略丑陋的图形,由于图像尺寸的限制,它变得模糊了。

library(ggplot2)
library(cowplot)
library(gridExtra)

#sample data
df <- data.frame(x = 1:100, y = cumsum(rnorm(100)), volume = sample(1:10, 400, replace = TRUE), group = letters[1:4])

plots <- list()

for (j in unique(df$group)){
  plot_df <- df[df$group == j, ]

  p1 <- ggplot(plot_df, aes(x,y)) +
    geom_line() +
    facet_wrap(~group) +
    xlab("")
  p2 <- ggplot(plot_df, aes(x,volume)) +
    geom_bar(stat = "identity")

  p_out <- plot_grid(p1, p2, align = "v", ncol = 1, rel_heights = c(.7, .3))

  plots[[j]] <- p_out

}

do.call(grid.arrange, plots)

reprex package(v0.2.1)于2019-01-25创建