ggplot:将x轴与不同的几何体(伽格朗日)对齐

时间:2019-11-03 00:57:43

标签: r ggplot2

我正在使用egg::arrange设置多个图,并且在为两个图正确设置x轴大小时,x轴值未对齐。通过示例更容易解释:

data <- data.frame(
  volume=c(100,200,150,400),
  revenue=c(1000,2500,1750,6000),
  day=c(as.Date('2019-10-01'),as.Date('2019-10-02'),as.Date('2019-10-03'),as.Date('2019-10-04'))
)

p1 <- ggplot(data, aes(x=day,y=volume)) + geom_line()
p2 <- ggplot(data, aes(x=day,y=revenue)) + geom_col()

egg::ggarrange(p1,p2,nrow=2,heights=c(3,1))

arran

期望的输出将是每个日在地块之间对齐。最好的是将x轴完全从第一个绘图中删除。

理想情况下,这将与其他egg::ggarrange组成,因为我实际上是在组合一堆情节。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为这里的挑战来自ggplot如何针对折线图(数据在数据点结束)和条形图(条形图是数据分辨率的90%宽)如何不同地扩展比例。沿任一方向额外延长了0.45天。

因此,如果ggplot向两个图表添加5%(默认值),则第一个图表将在绘制数据之前“一天的15%”(3天x 5%)开始。条形图在条形图之前的“一天的19.5%”(3.9天x 5%)开始,该条形图在10月1日点之前0.45天开始。

要使第一个图表对齐,可以进行数学运算并使用

p1 <- ggplot(data, aes(x=day,y=volume)) + geom_line() +
  scale_x_date(labels = NULL, name = "",
               expand = expand_scale(add = 0.645))
  # 0.645   = 0.45 for half of a bar + 3.9 x 5%

获得对齐:

enter image description here

但是,将任意的填充垫分配给该线并进一步扩展条形图0.45可能会更容易:

p1 <- ggplot(data, aes(x=day,y=volume)) + geom_line() +
  scale_x_date(labels = NULL, name = "",
               expand = expand_scale(add = 0.65))
p2 <- ggplot(data, aes(x=day,y=revenue)) + geom_col() +
  scale_x_date(labels = NULL, name = "",
               expand = expand_scale(add = 0.20))
egg::ggarrange(p1,p2,nrow=2,heights=c(3,1))