如何在Matlab中查看print()函数保存的图?

时间:2016-12-06 19:08:52

标签: matlab

这可能是一个简单的问题,但我有一些文件和数据。将它们中的每一个打印到'-dpng'文件后,我只想查看该图并将它们复制到别处。但是,打开文件,我看到的只是“导入向导”。我点击“完成”,没有任何反应。这是我的代码:

files = dir('*.csv');

for file = files'
   lab5 = csvread(file.name, 9)
   lab5(:,1) = log10(lab5(:,1))
   plot(lab5(:,1),lab5(:,2))
   print(strcat(file.name,'plot'), '-dpng')
end

我试图通过使用savefig来避免print(),但由于某种原因,savefig给了我一个模糊的错误。只有打印工作,但我不知道如何查看输出。

1 个答案:

答案 0 :(得分:2)

您将图像保存为filename.csvplot,预览不接受该图像为有效图像文件。

例如:

% Generate dummy file
fID = fopen('blah.csv', 'w');
fclose(fID);

% Recreate print job
files = dir('*.csv');
plot(1:10)
fname = strcat(files(1).name, 'plot');
print(fname, '-dpng');

这给了我们:

fname =

blah.csvplot

为什么.png没有附加到文件名?根据{{​​3}}的文档:

  

如果文件名不包含扩展名,则print会附加相应的扩展名。

解析扩展名的文件名输入(例如,前缀为.的内容),如果找到扩展名,则不附加扩展名。在这种情况下,传递给print的文件名具有.csvplot扩展名。这可能是意料之外的,但它确实有意义,文件扩展名实际上并没有控制文件本身的任何内容;您可以将文件另存为image.finderpleaseopen,并使其仍为有效的PNG文件。 Finder太顽固了,没有被强制打开它,因为它不是一个已知的,支持的文件扩展名。

要解决此问题,您应该使用正确的文件扩展名保存文件。有两种方法可以做到这一点,添加正确的扩展程序或删除不需要的扩展名,例如printfileparts,让print为您处理。

例如:

% blah.csvplot.png
fname = strcat(files(1).name, 'plot', '.png');
print(fname, '-dpng');

% blahplot.png
[~, filename] = fileparts(files(1).name);
fname = strcat(filename, 'plot');
print(fname, '-dpng');

regexprep没有为Finder生成有效输出,因为如果没有.fig扩展名,它就不会产生任何输出:

  

如果指定的文件名不包含.fig文件扩展名,则MATLAB会附加扩展名。 savefig不接受其他文件扩展名。

*.fig文件不是图像文件,无法由finder本地打开。