【问题标题】:given a dataframe of 3 columns, plot the first 2 on 1 axis, and the 3rd on a separate axis below it using ggplot2给定一个 3 列的数据框,使用 ggplot2 在 1 轴上绘制前 2 个,在其下方的单独轴上绘制第 3 个
【发布时间】:2014-02-24 17:24:38
【问题描述】:

我有一个包含 4 列的数据框:“x”“colA”“colB”“colC”

df <- data.frame(x, colA, colB, colC)
df2 <- melt(data=df, id.vars="x")

目前我正在做以下事情

ggplot(df2, aes(x=x, y=value, colour=variable)) + geom_line() + 
    facet_wrap( ~ variable, ncol=1, scales="free")

这会在 3 个单独的轴上绘制 3 个系列(colA、colB、colC)

我想在 1 个轴上绘制 colA 和 colB,并在它下面有一个单独的轴,只包含 colC

知道如何做到这一点吗?谢谢!

【问题讨论】:

  • 我认为更简单的方法是使用 grid.arrange 而不是 faceting。 p1 &lt;- ggplot(subset(df2, variable==c(colA,colB))) + geom_line(aes(x=x,y=value, color=variable)) p2 &lt;- ggplot(subset(df2, variable==c(colC)) + geom_line(aes(x=x,y=value,color=variable))。之后library(gridExtra)grid.arrange(p1,p2)
  • 我仍然很难让它工作......也许是因为我在原始数据框中包含了索引?说我要做 df
  • 我将数据拆分为 2 个不同的数据框,并使用 grid.arrange 将它们拼接在一起,效果很好,但我仍然希望有一个更优雅的解决方案。
  • 您能否将dput(df) 包含在内,以便我发布示例。

标签: r ggplot2 dataframe reshape2


【解决方案1】:

试试:

df2$is.colC <- df2$variable == "colC"
ggplot(df2, aes(x=x, y=value, colour=variable)) + geom_line() + 
  facet_wrap( ~ is.colC, ncol=1, scales="free")

我们只是添加了一个新变量来突出显示该行是否为“colC”行,并对其进行分面。

以及供参考的数据:

set.seed(1)
x <- 1:10
colA <- runif(10)
colC <- runif(10)
colB <- runif(10)
df <- data.frame(x, colA, colB, colC)
df2 <- melt(data=df, id.vars="x")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 2021-09-09
    • 2012-06-27
    相关资源
    最近更新 更多