首页 文章

在Matlab中绘制许多csv“行”文件(如果你喜欢,则绘制R)[关闭]

提问于
浏览
0

问题

我有50个带有这种结构的.csv文件:

value1,value2,...

一个长行,每个值用逗号分隔 .

具体来说,它们是浮点数,每个csv具有不同数量的值 .

0.0023593,0.0062565,0.00723753,0.0023353,0.0052353,0.0024353,...

我必须在同一图表中绘制每个数据文件,以查找此值的趋势,并可能使用平均图 .

How can I do this in a simple manner? Matlab is preferred but R is ok

更新

我知道我可以像[在Matlab中]那样做:

>> arr1 = csvread('file1.csv');
>> plot(arr1)

>> arr2 = csvread('file2.csv');
>> plot(arr2)

......但我正在寻找一种程序方式 .

Update2

谢谢你的答案,我做了一个简单的黑客攻击,我最终得到了正确的解决方案,但它是一个黑客 . 我刚刚使用python来复制命令,然后我运行了所有命令......

@Crowley你的解决方案可能是正确的但不幸的是有一些语法问题 .

@njc感谢您的努力!但这不是我需要的,也许我的结果可以帮助你开发R代码,那么我一定会把你的答案提升为正确的答案 .

结果如下:

enter image description here

用这个制作"stupid" script

2 回答

  • 0

    我担心我不知道任何MATLAB,但在R中执行此操作的一种方法是使用ggplot2包 . 它的工作原理是在绘图中添加不同的图层,这使它成为使用不同数据框的便捷方式 .

    首先,我生成了一些要使用的示例数据 .

    a <- data.frame(runif(100))
    b <- data.frame(runif(150))
    c <- data.frame(runif(125))
    
    names(a) <- 'y'
    names(b) <- 'y'
    names(c) <- 'y'
    

    这些只是不同长度的随机变量的数据帧 . 因为你的所有数据都是一维的,所以我制作了一个盒子图 .

    然后我分别使用每个数据框创建一个ggplot .

    p <- ggplot()
    p <- p + geom_boxplot(data=a, aes(y=y, x=1, color='a'))
    p <- p + geom_boxplot(data=b, aes(y=y, x=2, color='b'))
    p <- p + geom_boxplot(data=c, aes(y=y, x=3, color='c'))
    p         # to show the plot
    

    每次我使用geom_boxplot()我都会在图中添加另一个图层 . 您也可以在一行中执行此操作 .

    p <- ggplot() + geom_boxplot(data=a, aes(y=y, x=1, color='a')) + geom_boxplot(data=b, aes(y=y, x=2, color='b')) + geom_boxplot(data=c, aes(y=y, x=3, color='c'))
    p         # to show the plot
    

    Simple box plot. It's also easy to do things like change the axis names, legend title, etc.

    现在我再次阅读你的帖子,我发现你可能意味着你想把它们指向散点图,文件中的数字位置为x值 . 使用ggplot很容易,但在我的例子中你不会看到任何趋势,因为我的值都是随机的 .

    q <- ggplot()
    q <- q + geom_point(data=a, aes(y=y, x=1:dim(a)[1], color='a'))
    q <- q + geom_point(data=b, aes(y=y, x=1:dim(b)[1], color='b'))
    q <- q + geom_point(data=c, aes(y=y, x=1:dim(c)[1], color='c'))
    q
    

    要么

    q <- ggplot() + geom_point(data=a, aes(y=y, x=1:dim(a)[1], color='a')) + geom_point(data=b, aes(y=y, x=1:dim(b)[1], color='b')) + geom_point(data=c, aes(y=y, x=1:dim(c)[1], color='c'))
    q
    

    Scatter plot

    我希望这有帮助!如果您对ggplot有任何疑问,请告诉我 . 虽然我当然不是专家,但我会尽我所能 .

    注意:在创建绘图之前,我已将a,b和c的列名更改为“y”,但我在制作数据时忘记更新其名称 .

    这个和你想要平滑曲线而不是点之间的唯一区别是什么?如果是这样,这是一个简单的解决方案 .

    首先,我改变了数据,以便它有一个趋势 .

    a <- data.frame(runif(100)-(1:100)/300)
    b <- data.frame(runif(150)-(1:150)/300)
    c <- data.frame(runif(125)-(1:125)/300)
    names(a) <- 'y'
    names(b) <- 'y'
    names(c) <- 'y'
    

    然后我简单地用 geom_smooth 替换 geom_point .

    r <- ggplot()
    r <- r + geom_smooth(data=a, aes(y=y, x=1:dim(a)[1], color='a'), se=FALSE)
    r <- r + geom_smooth(data=b, aes(y=y, x=1:dim(b)[1], color='b'), se=FALSE)
    r <- r + geom_smooth(data=c, aes(y=y, x=1:dim(c)[1], color='c'), se=FALSE)
    r
    

    Plot with geom_smooth

    se=FALSE 阻止它在背景中将标准错误显示为灰色条带 . 如果标准错误对您有帮助,您可以省略它 .

  • 2

    假设我们在 YourFolder='whatever\address\' 文件夹中有数据,那么如果我们想要 double 数组:

    Files=dir(['YourFolder' .*']);  % look for csv. files in the folder
    [M,~]=size(Files);           % count them
    AllData=zeros(M,0);
    
    for ii=1:M
      Temp=importdata([YourFolder,Files(ii).name '.csv'],','); % Read csv file into a structure
      Temp=Temp.data;   & Use only the data part
      if size(Temp,2>size(AllData,2)  %compare 2. dimensions of AllData and Temp
        % if Temp is wider, then append NaN values to AllData to match widths
        n=size(Temp,2)-size(AllData,2);
        Refill=nan(M,n);
        AllData=[AllData,Refill];
      elseif size(Temp,2<size(AllData,2)
        % If AllData is wider then append NaN values to Temp to match widths
        n=size(AllData,2)-size(Temp,2);
        Refill=nan(1,n);
        Temp=[Temp,Refill];
      end
      % append new line to AllData
      AllData(ii,:)=Temp;
    end
    
    plot(AllData') % Alldata shall be transposed because plot uses columns as data sets by default.
    

    如果我们希望 cell 数组与代码一起工作更简单,因为向量不需要匹配 .

    Files=dir(['YourFolder' .*']);  % look for csv. files in the folder
    [M,~]=size(Files);           % count them
    AllData=cell(M,1);
    
    for ii=1:M
      Temp=importdata([YourFolder,Files(ii).name '.csv'],','); % Read csv file into a structure
      Temp=Temp.data;   & Use only the data part
    
      % append new line to AllData
      AllData{ii}=Temp;
    end
    
    plot(AllData(:))
    

相关问题