使用R中不同长度的向量绘制数据

时间:2013-10-09 19:54:17

标签: r plot

我想在同一个图中绘制几个文件;每个文件都有两列数据。

问题是每个文件都有不同的行数(529,567,660等)

对于具有相同行数的数据,我执行了以下操作:

  data1 <- read.table(file="ro0.2/T0.1/sq_Ave.dat")
  x1 <- data1[1]
  y1 <- data1[2]
  data2 <- read.table(file="ro0.4/T0.1/sq_Ave.dat")
  x2 <- data2[1]
  y2 <- data2[2]

  max_valuex = max(x1,x2,x3,x4,x5)
  max_valuey = max(y1,y2,y3,y4,y5)
  matplot(x1,cbind(y1,y2,y3,y4,y5),type="l", 
       col=c("black","red","green","blue","orange"),
       lwd = 2,xlab = expression(q*sigma), ylab="S(q)", col.lab="black",
       cex.lab=1.5,font.lab=4, xaxt = "n", yaxt = "n", xlim = c(0,max_valuex), 
       ylim = c(0,max_valuey), xaxs = "i", yaxs = "i")

但是,这对于行数不同的文件不起作用。

R抱怨道:

Error in data.frame(..., check.names = FALSE) : 
arguments imply differing number of rows: 529, 567, 661
Calls: matplot -> ncol -> as.matrix -> cbind -> cbind -> data.frame

非常感谢任何想法或建议!

提前多多感谢

S H-V

2 个答案:

答案 0 :(得分:1)

我猜你可以用NA来扩大你的向量。我相信在下次处理您的数据时这无关紧要。 E.g:

    a= 1:10
    b=1:5
    d=1:7

    data.frame(a,b,d)   #different length
    #Error in data.frame(a, b, d) : 
    #arguments imply differing number of rows: 10, 5, 7

    length(b) = length(d) = length(a)

    data.frame(a,b,d)  # no error now

        a  b  d
    1   1  1  1
    2   2  2  2
    3   3  3  3
    4   4  4  4
    5   5  5  5
    6   6 NA  6
    7   7 NA  7
    8   8 NA NA
    9   9 NA NA
    10 10 NA NA

答案 1 :(得分:1)

即使您设法将y轴数据加载到列表对象中,列表对象也是R中用于存储可变长度矢量的自然数据类型。在下一步中,您将得到类似的内容:

> matplot (matrix(1:100, nrow=10, ncol=10)[1], matrix(1:100, nrow=12, ncol=10))
Error in matplot(matrix(1:100, nrow = 10, ncol = 10)[, 1], matrix(1:100,  : 
'x' and 'y' must have same number of rows

像plot或matplot这样的散点图需要完整的x,y元组,但在你的代码中,你只使用x1作为x值。您的代码示例不完整。你也加载x2,x3,... 但只用它们来计算xlim。如果你不想绘制它们,为什么要计算xlim包括所有x的最大值?

因此,我不清楚最终的情节应该是什么样的,散点图是否是数据的正确可视化。您可能希望提供有关您的数据实际包含的内容以及应如何处理不完整数据的更多详细信息。

使用add=TRUE可能是您想要将多个线图绘制成单个图形:

matplot(data1[,1:2], xlim = c(0,max_valuex), ylim = c(0,max_valuey))
matplot(data2[,1:2], add=TRUE)