【问题标题】:Referencing x axis variable from a melted data frame to plot using ggplot2 in R使用 R 中的 ggplot2 从熔化的数据框中引用 x 轴变量以进行绘图
【发布时间】:2014-01-24 11:11:56
【问题描述】:

我有一个数据框 df 有 10 列这样的,

row.names   c(300, 400, 500, 600, 700)  X1  X2  X3  X4  X5  X6  X7  X8  X9
1   absTLM_3_4  300 -4.147782e-08   -3.360635e-08   -3.306786e-08   -3.133482e-08   -3.124207e-08   -3.056317e-08   -3.020253e-08   -2.950814e-08   -2.955155e-08
2   absTLM_4_5  400 -3.703708e-08   -3.013687e-08   -2.746570e-08   -2.627163e-08   -2.528328e-08   -2.457543e-08   -2.437666e-08   -2.412295e-08   -2.358447e-08
3   absTLM_5_6  500 -3.575756e-08   -2.694028e-08   -2.457341e-08   -2.331162e-08   -2.262283e-08   -2.180886e-08   -2.104917e-08   -2.101946e-08   -2.081650e-08
4   absTLM_6_7  600 -2.454283e-08   -2.152165e-08   -1.967477e-08   -1.885213e-08   -1.835989e-08   -1.814608e-08   -1.806438e-08   -1.785795e-08   -1.784158e-08
5   absTLM_7_8  700 -2.317125e-10   -1.029456e-08   -1.076342e-08   -1.365264e-08   -1.378578e-08   -1.457421e-08   -1.463740e-08   -1.480280e-08   -1.515121e-0

现在我想在 x 轴上绘制第 1 列,在 y 轴上绘制第 2、5、6 和 8 列。为此,我使用以下代码,

x4 <- melt(df, id=names(df)[1], measure=names(df)[c(2, 5, 6, 8)], variable = "cols")
plt <- ggplot(x4) +
        geom_line(aes(x=x,y= value, color=cols), size=1) +
        labs(x = "x", y = "y")

当我调用绘图对象 plt 时,我得到 eval(expr, envir, enclos) 中的错误:找不到对象“x”
有人可以指出我应该在这里更改什么以正确显示情节。

谢谢。

【问题讨论】:

  • X4 中没有名为 x 的列。请参阅head(x4) 并相应地调整您的geom_line(aes())
  • 该列的名称似乎是X1,而不是x
  • @BrandonBertelsen 似乎我需要的第一列的列标题被命名为 c(300, 400, 500, 600, 700) ,现在当我使用 plt &lt;- ggplot(x4) + geom_line(aes(x=c(300, 400, 500, 600, 700),y= value, color=cols), size=1) + labs(x = "x", y = "y") 时我仍然收到错误,例如,美学必须是长度一,或者与dataProblems长度相同:c(300, 400, 500, 600, 700)
  • 我认为您应该只重命名列并使用典型样式(仅在列名中没有空格 _.)。 colnames(df)[1] &lt;- "x",也许你的原始代码可以工作。你能提供给我们dput(head(df))吗?

标签: r ggplot2 reshape2 melt


【解决方案1】:

您的列名似乎被窃听了。试试这个:

x4 <- melt(df, id=names(df)[1], measure=names(df)[c(2, 5, 6, 8)], variable = "cols")
colnames(x4)[1] <- "x"
plt <- ggplot(x4) +
        geom_line(aes(x=x,y= value, color=cols), size=1) +
        labs(x = "x", y = "y")

【讨论】:

  • 是的,你是对的。更改列标题名称后,它的工作原理!感谢您的有用建议。
【解决方案2】:

下面这段代码没有正确绘制数据的原因是列标题名称c(300, 400, 500, 600, 700)是数据框df中第一列的名称。

x4 <- melt(df, id=names(df)[1], measure=names(df)[c(2, 5, 6, 8)], variable = "cols")
plt <- ggplot(x4) +
        geom_line(aes(x=x,y= value, color=cols), size=1) +
        labs(x = "x", y = "y")

所以必须先改df的列标题,根据Brandon Bertelsen的建议,通过下面这行代码将c(300, 400, 500, 600, 700)的列标题改成x

colnames(df)[1] <- "x"

一旦更改了列标题名称,就可以熔化数据框,之后绘图就可以正常工作了,

x4 <- melt(df, id=names(df)[1], measure=names(df)[c(2, 5, 6, 8)], variable = "cols")
plt <- ggplot(x4) +
        geom_point(aes(x=x,y= value, color=cols), size=2) +
        labs(x = "x", y = "y")

所以plt的情节是这样的,

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 2021-02-10
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多