ggplot2:使用独立的“ Y”轴来改变刻面宽度

时间:2019-04-16 20:37:28

标签: r ggplot2 plot gridview graph

虚拟数据

d = data.frame(
    x = factor(LETTERS[c(1,2,3,4,1,2,3,4,1,2,1,2,1,2,1,2)]),
    y = c(100,80,70,60,130,90,65,60,2,3,3,3,2,2,1,2),
    grid = rep(letters[1:2], each=8)
)

问题

ggplot(d, aes(x=x, y=y)) + facet_grid(~grid, scales="free",space="free_x") + geom_point()

enter image description here

我喜欢这张图。我唯一的问题是两个网格都使用相同的Y轴。因此,我尝试使用facet_wrap代替facet_grid并得到

ggplot(d, aes(x=x, y=y)) + facet_wrap(~grid, scales="free") + geom_point()

enter image description here

但是不幸的是,facet_wrap没有“ space”参数,因此,右图和左图的宽度相同。

问题

我该怎么做才能使两个侧面之间的变量d$x的级别之间的距离相等(导致侧面具有不同的宽度),并且每个侧面都有独立的Y轴。当然,我想使小平面保持水平对齐。

1 个答案:

答案 0 :(得分:2)

使用ggplot grob并修改表格中的宽度

# Capture the plot
q = ggplot(d, aes(x=x, y=y)) + facet_grid(~grid, scales="free",space="free_x") + geom_point()
gt = ggplotGrob(q)

# Modify the widths
gt$widths[5] = unit(8, "cm")
gt$widths[9] = unit(4, "cm")

# Plot the graph
grid.newpage()
grid.draw(gt)

enter image description here