【问题标题】:How to converge two plots into one plot (ggplot2)?如何将两个图收敛到一个图(ggplot2)?
【发布时间】:2018-01-17 05:10:12
【问题描述】:

我有两个 x 轴不同但 y 轴相同的图。每个 x 轴的顺序必须保持这种方式。我想通过在底部有一个 x 轴,在顶部有一个 x 轴,将两张图融合为一张。

plot1 <- ggplot(df1, aes(x = Target1, y = RT1)) + geom_point() + geom_line(aes(group = 1)) 
plot2 <- ggplot(df2, aes(x = Target2, y = RT2)) + geom_point() + geom_line(aes(group = 1)) 

我怎样才能得到我想要的情节?

【问题讨论】:

  • 请阅读how to make a reproducible example。因此,发布一些数据并指定所需的输出:您是否希望两个图都在一个图中(不现实,因为您想要不同的 x 轴顺序)还是要将两个图放在一个图中(并排)?
  • library(tidyverse); bind_rows(set_names(df1, ~gsub('\\d', '', .x)), set_names(df2, ~gsub('\\d', '', .x)), .id = 'id') %&gt;% ggplot(aes(Target, RT)) + geom_point() + geom_line() + facet_wrap(~id) ...或类似的东西

标签: r plot ggplot2 linegraph


【解决方案1】:

一种方法是使用 sec_axis()。在这里,我创建了两个数据框。两个 y 轴(RT1 和 RT2)在同一刻度上。 Target1 和 Target2 的尺度不同。

df1 <- data.frame(Target1 = c(1,2,3), RT1 = c(1,2,3))
df2 <- data.frame(Target2 = c(20,30,40), RT2 = c(3,4,5))

为了演示效果,我对 df1 使用散点图,对 df2 使用折线图。我还将 Target2 除以 10,以使 x 变量更接近且更易于比较。

ggplot() +
  geom_point(data = df1, mapping = aes(Target1, RT1)) +
  geom_line(data = df2, mapping = aes(Target2/10, RT2)) +
  scale_x_continuous("Target 1", sec.axis = sec_axis(~.*10, name = "Target 2"))

或者,如果您不想重新出售 x 轴,则可以使用 dup_axis() 代替。

ggplot() +
  geom_point(data = df1, mapping = aes(Target1, RT1)) +
  geom_line(data = df2, mapping = aes(Target2, RT2)) +
  scale_x_continuous("Target 1", sec.axis = dup_axis(name = "Target 2"))

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    相关资源
    最近更新 更多