Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何打印多个开放图形,如何简化向MATLAB导入数据_Matlab_Printing_Import_Figures - Fatal编程技术网

如何打印多个开放图形,如何简化向MATLAB导入数据

如何打印多个开放图形,如何简化向MATLAB导入数据,matlab,printing,import,figures,Matlab,Printing,Import,Figures,我有两个问题: 我在MATLAB中有12个打开的图形(已经由另一个函数生成,图1到图12),我想将它们全部打印到一个文件中,但也要打印到我的打印机中。我怎样才能为它编写代码?我已经读过关于获取数字句柄的内容,但我并没有真正理解它的含义以及之后如何打印它们 我编写了一个脚本,将许多Excel文件中的数据导入MATLAB。excel文件被命名,因此唯一的区别在于初始部分,其中包括个人的姓名/代码(为其提供信息) 我的脚本如下所示: Indi1_Sim_T_SFTW1= xlsread('E:\MAT

我有两个问题:

  • 我在MATLAB中有12个打开的图形(已经由另一个函数生成,图1到图12),我想将它们全部打印到一个文件中,但也要打印到我的打印机中。我怎样才能为它编写代码?我已经读过关于获取数字句柄的内容,但我并没有真正理解它的含义以及之后如何打印它们

  • 我编写了一个脚本,将许多Excel文件中的数据导入MATLAB。excel文件被命名,因此唯一的区别在于初始部分,其中包括个人的姓名/代码(为其提供信息)

  • 我的脚本如下所示:

    Indi1_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi1_Output_SFTW1_6min_100_020812.xls','Indi1_Sim_T_SFTW12')
    Indi1_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi1_Output_SFTW1_6min_100_020812.xls','Indi1_Sim_V_SFTW12')
    
    Indi2_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi2_Output_SFTW1_6min_100_020812.xls','Indi2_Sim_T_SFTW12')
    Indi2_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi2_Output_SFTW1_6min_100_020812.xls','Indi2_Sim_V_SFTW12')
    
    Indi3_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi3_Output_SFTW1_6min_100_020812.xls','Indi3_Sim_T_SFTW12')
    Indi3_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi3_Output_SFTW1_6min_100_020812.xls','Indi3_Sim_V_SFTW12')
    
    Indi4_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi4_Output_SFTW1_6min_100_020812.xls','Indi4_Sim_T_SFTW12')
    Indi4_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi4_Output_SFTW1_6min_100_020812.xls','Indi4_Sim_V_SFTW12')
    
    N = 4; %// Number of Excel files
    C = cells(2 * N, 1);
    for k = 1:2 * N
        filename = sprintf('E:\MATLAB\Indi%d_Output_SFTW1_6min_100_020812.xls', k);
        C{k} = xlsread(filename, sprintf('Indi%d_Sim_T_SFTW12', k));
        C{k + 1} = xlsread(filename, sprintf('Indi%d_Sim_T_SFTW12', k));
    end
    
    对许多其他人来说也是如此

    如您所见,我正在为每个人重复代码。我可以用循环函数来简化它吗


    注:所有导入的数据都是数字。

    关于项目符号1:

    我在matlab中打开了图形,我想将它们全部打印到一个文件中,但也要打印到我的打印机中

    你有这个命令。只需指定图形的句柄,例如:

    print(h)                      %// Send figure with handle h to printer
    print(h, '-djpeg', filename)  %// Save figure with handle h to a JPEG file
    
    关于第2号项目符号:

    。。。我可以用循环函数来简化它吗

    是的,你可以。您可以这样做:

    Indi1_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi1_Output_SFTW1_6min_100_020812.xls','Indi1_Sim_T_SFTW12')
    Indi1_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi1_Output_SFTW1_6min_100_020812.xls','Indi1_Sim_V_SFTW12')
    
    Indi2_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi2_Output_SFTW1_6min_100_020812.xls','Indi2_Sim_T_SFTW12')
    Indi2_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi2_Output_SFTW1_6min_100_020812.xls','Indi2_Sim_V_SFTW12')
    
    Indi3_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi3_Output_SFTW1_6min_100_020812.xls','Indi3_Sim_T_SFTW12')
    Indi3_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi3_Output_SFTW1_6min_100_020812.xls','Indi3_Sim_V_SFTW12')
    
    Indi4_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi4_Output_SFTW1_6min_100_020812.xls','Indi4_Sim_T_SFTW12')
    Indi4_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi4_Output_SFTW1_6min_100_020812.xls','Indi4_Sim_V_SFTW12')
    
    N = 4; %// Number of Excel files
    C = cells(2 * N, 1);
    for k = 1:2 * N
        filename = sprintf('E:\MATLAB\Indi%d_Output_SFTW1_6min_100_020812.xls', k);
        C{k} = xlsread(filename, sprintf('Indi%d_Sim_T_SFTW12', k));
        C{k + 1} = xlsread(filename, sprintf('Indi%d_Sim_T_SFTW12', k));
    end
    
    现在所有数据都存储在单元格数组
    C


    解释 我计划将
    xlsread
    的输出存储在一个内存中。您有
    N
    个文件,每个文件从两个工作表读取数据,因此单元数组
    C
    2*N
    单元初始化

    for
    循环迭代每个文件,并使用命令和迭代计数器
    k
    ,构造文件名:

    filename = sprintf('E:\MATLAB\Indi%d_Output_SFTW1_6min_100_020812.xls', k);
    
    此处的结果存储在变量
    filename
    中,并传递给
    xlsread
    命令。图纸名称也使用构造,并直接传递到
    xlsread
    ,而不首先存储在变量中

    问:为什么要在变量中存储文件名而不是sheetnames?
    答:我决定将文件名存储在变量中,只是因为我不想构造它两次,而工作表名称只构造一次,所以将它们存储在变量中没有任何意义

    循环完成后,整个数据存储在单元格数组
    C
    中。要访问C中的第i个元素(单元格),请使用大括号(
    {}
    )。例如,要访问第二个单元格,请写入
    C{2}

    问:为什么是细胞阵列? 答:在单元格数组中,每个单元格可以包含不同类型和长度的数据,例如{2,‘hello’}是一个包含两个单元格的单元格数组:一个包含数字2,另一个包含字符串“hello”。由于不能保证
    xlsread
    返回相同长度的数据,因此不能使用简单的矩阵来存储所有文件的内容


    希望这有帮助

    关于1号项目符号:

    我在matlab中打开了图形,我想将它们全部打印到一个文件中,但也要打印到我的打印机中

    你有这个命令。只需指定图形的句柄,例如:

    print(h)                      %// Send figure with handle h to printer
    print(h, '-djpeg', filename)  %// Save figure with handle h to a JPEG file
    
    关于第2号项目符号:

    。。。我可以用循环函数来简化它吗

    是的,你可以。您可以这样做:

    Indi1_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi1_Output_SFTW1_6min_100_020812.xls','Indi1_Sim_T_SFTW12')
    Indi1_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi1_Output_SFTW1_6min_100_020812.xls','Indi1_Sim_V_SFTW12')
    
    Indi2_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi2_Output_SFTW1_6min_100_020812.xls','Indi2_Sim_T_SFTW12')
    Indi2_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi2_Output_SFTW1_6min_100_020812.xls','Indi2_Sim_V_SFTW12')
    
    Indi3_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi3_Output_SFTW1_6min_100_020812.xls','Indi3_Sim_T_SFTW12')
    Indi3_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi3_Output_SFTW1_6min_100_020812.xls','Indi3_Sim_V_SFTW12')
    
    Indi4_Sim_T_SFTW1= xlsread('E:\MATLAB\Indi4_Output_SFTW1_6min_100_020812.xls','Indi4_Sim_T_SFTW12')
    Indi4_Sim_V_SFTW1= xlsread('E:\MATLAB\Indi4_Output_SFTW1_6min_100_020812.xls','Indi4_Sim_V_SFTW12')
    
    N = 4; %// Number of Excel files
    C = cells(2 * N, 1);
    for k = 1:2 * N
        filename = sprintf('E:\MATLAB\Indi%d_Output_SFTW1_6min_100_020812.xls', k);
        C{k} = xlsread(filename, sprintf('Indi%d_Sim_T_SFTW12', k));
        C{k + 1} = xlsread(filename, sprintf('Indi%d_Sim_T_SFTW12', k));
    end
    
    现在所有数据都存储在单元格数组
    C


    解释 我计划将
    xlsread
    的输出存储在一个内存中。您有
    N
    个文件,每个文件从两个工作表读取数据,因此单元数组
    C
    2*N
    单元初始化

    for
    循环迭代每个文件,并使用命令和迭代计数器
    k
    ,构造文件名:

    filename = sprintf('E:\MATLAB\Indi%d_Output_SFTW1_6min_100_020812.xls', k);
    
    此处的结果存储在变量
    filename
    中,并传递给
    xlsread
    命令。图纸名称也使用构造,并直接传递到
    xlsread
    ,而不首先存储在变量中

    问:为什么要在变量中存储文件名而不是sheetnames?
    答:我决定将文件名存储在变量中,只是因为我不想构造它两次,而工作表名称只构造一次,所以将它们存储在变量中没有任何意义

    循环完成后,整个数据存储在单元格数组
    C
    中。要访问C中的第i个元素(单元格),请使用大括号(
    {}
    )。例如,要访问第二个单元格,请写入
    C{2}

    问:为什么是细胞阵列? 答:在单元格数组中,每个单元格可以包含不同类型和长度的数据,例如{2,‘hello’}是一个包含两个单元格的单元格数组:一个包含数字2,另一个包含字符串“hello”。由于不能保证
    xlsread
    返回相同长度的数据,因此不能使用简单的矩阵来存储所有文件的内容


    希望这有帮助

    非常感谢您的快速回复。。我已经试过第一个了,它工作得很好。。谢谢但是,我想问你1)是否有可能选择保存这些图形的文件夹(而不是自动保存在MATLAB主文件夹中)。。2) 如果你能解释一下你在第二段代码中做了什么,我将非常感激@狮子座。。。1) 指定文件名的完整路径,它会将文件保存到您想要的任何位置。2) 它只是一个
    for
    循环,循环遍历文件并为每个文件调用
    xlsread
    。在每次迭代中,
    sprintf
    用于构造第k个文件名字符串和工作表名称字符串的字符串
    sprintf
    与C编程语言中的printf非常相似,如果您熟悉的话。再次感谢。。有文件路径的那个工作得很好。第二个我必须先试试,因为我需要一些时间来理解新的代码,因为我是