2

我正在尝试按照以下示例在地图上绘制条形图:如何将条形图绘制到 ggplot2 地图上。这工作正常,但与我想添加 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
4

1 回答 1

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)
于 2017-12-17T22:05:29.213 回答