0

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

问题是每个文件都有不同的行数(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

任何想法或建议将不胜感激!

非常感谢提前

高压

4

2 回答 2

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)
于 2013-10-09T20:38:48.970 回答
1

我想你可以用 s 来放大你的向量NA。我相信这在接下来处理您的数据时无关紧要。例如:

    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
于 2013-10-09T20:15:26.387 回答