创建两个具有可比y轴但具有不同y限制的单独ggplots

时间:2017-12-17 16:51:41

标签: r ggplot2 comparable yaxis

我试图按照这个例子在地图上绘制条形图:How to plot barchart onto ggplot2 map。这工作正常,但与我想添加x和y轴的示例相反。问题是数据的y范围在我想要创建条形图的区域之间存在很大差异。

为了产生可比较的图形(即y轴具有相同的尺寸),我对所有图形应用相同的y限制并调整每个图形的间距。然而,这不是一个好的解决方案,因为一些图形(在这种情况下为p2)在条形图上方和下方具有大的空白区域。为了使其工作,我正在寻找一种方法,首先裁剪图形以移除空白区域,同时保持图形的尺寸,以便可以比较y轴。

library(dplyr)
library(ggplot2)

df <- data.frame(type = c("A", "B", "A", "B"), country = c("NLD", "NLD", "BEL", "BEL"), value = c(10, -10, 5, 2))

df1 <- filter(df, country == "NLD") 
p1 <- ggplot(data = df1) +
    geom_col(aes(x = type, y = value)) +
    scale_y_continuous(limits = c(min(df$value), max(df$value)), breaks = seq(min(df1$value), max(df1$value), 2)) + 
    theme_bw()
p1


df2 <- filter(df, country == "BEL") 
p2 <- ggplot(data = df2) +
      geom_col(aes(x = type, y = value)) +
      scale_y_continuous(limits = c(min(df$value), max(df$value)), breaks   = seq(min(df2$value), max(df2$value), 2)) +
      theme_bw()
    p2

1 个答案:

答案 0 :(得分:1)

你为每个情节试过coord_fixed吗?如果你可以控制每个图的宽度相同,条形的高度将是可比的。

library(dplyr)
library(ggplot2)
library(gridExtra)

df <- data.frame(type = c("A", "B", "A", "B"), country = c("NLD", "NLD", "BEL", "BEL"), value = c(10, -10, 5, 2))

df1 <- filter(df, country == "NLD") 
p1 <- ggplot(data = df1) +
  geom_col(aes(x = type, y = value)) +
  # scale_y_continuous(limits = c(min(df$value), max(df$value)), breaks = seq(min(df1$value), max(df1$value), 2)) + 
  theme_bw()

df2 <- filter(df, country == "BEL") 
p2 <- ggplot(data = df2) +
  geom_col(aes(x = type, y = value)) +
  # scale_y_continuous(limits = c(min(df$value), max(df$value)), breaks   = seq(min(df2$value), max(df2$value), 2)) +
  theme_bw()

x_range <- length(unique(df$type))
y_range1 <- max(df1$value) - min(df1$value)
y_range2 <- max(df2$value) - min(df2$value)

g1 <- p1 + coord_fixed(ratio = x_range / y_range1)
g2 <- p2 + coord_fixed(ratio = x_range / y_range1)

# example output
grid.arrange(g1, g2, nrow = 1)