【问题标题】:Plotting a graph using vectors of different length in R在 R 中使用不同长度的向量绘制图形
【发布时间】:2013-08-05 17:10:09
【问题描述】:

我有一个数组和一个向量如下-

v<-c(2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0)
result<-matrix(1,9,1000)

现在对于 v 中的每个值,我想在结果矩阵中绘制一整行。 例如。对于 v 中的值 2.4,我想绘制点 (2.4,result[1,1]),(2.4,result[1,2]),(2.4,result[1,3]) 到 (2.4,result[1, 1000]),

当我尝试使用

 points(v[1],result[1,],pch=".")

我得到一个错误- x 和 y 的长度不同。

有什么办法可以做到吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    plot(cbind(v[1], result[1,])) 将根据需要回收v[1]

    【讨论】:

    • 这可行,但每次我为不同的 v 值执行此操作时,整个图表都会重新绘制。有没有办法只在一张图中为 v 的所有值绘制这个?
    【解决方案2】:

    根据您的描述,您可以将 v 数组视为您的数据的标签。让我们记住这一点来绘制数据,并使用 ggplot2:

    首先将您的数组v 变成与result 大小相同的东西:

    require('ggplot2')
    require('reshape')
    
    # OP's original data
    v<-c(2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0)    
    v.mat <- matrix(v,9,1000)
    
    # OP's original data
    result<-matrix(1,9,1000)
    

    接下来,我们用melt把这个数据变成一个长数据框

    v.mat.melt <- melt(v.mat)
    result.melt <- melt(result)
    

    然后将我们需要的位组合成一个数据帧:

    # combine data
    data <- data.frame('v' = v.mat.melt[,3],
                       'obs' = result.melt[,2],
                       'result' = result.melt[,3])
    

    请注意,我为“观察”添加了“obs”,这是观察的索引。我不使用它,但它可能很方便。

    最后,把它全部画出来

    d <- ggplot(data = data,
                aes(x = v,
                    y = result,
                    color = v)) + 
      geom_point()
    print(d)
    

    等等:

    【讨论】:

      猜你喜欢
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多