r - 将多个 ggplot2 绘图与网格对齐

标签 r data-visualization ggplot2

上下文

我想在同一页面上使用相同的图例绘制两个 ggplot2。 http://code.google.com/p/gridextra/wiki/arrangeGrob描述了如何做到这一点。这看起来已经不错了。但是...在我的示例中,我有两个具有相同 x 轴和不同 y 轴的图。当 y 轴的范围至少比其他图高 10 倍时(例如 10000 而不是 1000),ggplot2(或网格?)不会正确对齐图(请参见下面的输出)。

问题

如何使用两个不同的 y 轴对齐图的左侧?

示例代码

x = c(1, 2)
y = c(10, 1000)
data1 = data.frame(x,y)
p1 <- ggplot(data1) + aes(x=x, y=y, colour=x) + geom_line()

y = c(10, 10000)
data2 = data.frame(x,y)
p2 <- ggplot(data2) + aes(x=x, y=y, colour=x) + geom_line()


# Source: http://code.google.com/p/gridextra/wiki/arrangeGrob
leg <- ggplotGrob(p1 + opts(keep="legend_box"))
legend=gTree(children=gList(leg), cl="legendGrob")
widthDetails.legendGrob <- function(x) unit(3, "cm")
grid.arrange(
  p1 + opts(legend.position="none"),
  p2 + opts(legend.position="none"),
  legend=legend, main ="", left = "")

输出

Example image

最佳答案

以更通用的方式执行相同操作的更简洁方法是使用格式化程序参数:

p1 <- ggplot(data1) +
    aes(x=x, y=y, colour=x) +
    geom_line() + 
    scale_y_continuous(formatter = function(x) format(x, width = 5))

对第二个图执行相同的操作,并确保设置宽度 >= 您期望在两个图中的最宽数字。

关于r - 将多个 ggplot2 绘图与网格对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12448428/

相关文章:

r - 在 R 中将 "/"更改为 "\"

r - 如何在 R 中将文本字符串作为数字导入?

r - 如何在与特定文本匹配的ggplot中突出显示geom_text

python - 并排显示两张 Folium map ?

r - 如何绘制两组收入群体人口和值(value)观

r - 将日期从 MySQL 正确导入到 R

具有多个变量输入的 R 自定义 data.table 函数

python - Matplotlib 中使用 RGB 值的颜色

r - 在光栅键周围绘制一个框

r - 在无边界 map 上画点