【发布时间】:2020-12-07 21:49:33
【问题描述】:
这是我在使用 Matlab 和 Illustrator (2018 CC) 时反复出现的问题:
imagesc 的很多数据如果粘贴到 Illustrator 中看起来会略有不同。这在科学背景下似乎很危险,从严格的最终用户角度来看似乎很难理解。
- 有人能从技术角度解释一下这可能(或正在)发生的原因吗?
- 有没有办法以矢量化的形式创建密集的
imagesc(没有数据失真)?
重现所描述问题的代码,下面的截图详细说明了一些可见的问题:
rng default %for reproducability, ver: Matlab2020b
data=smoothdata(rand([2000 40])-.5,2,"movmean",10); %some representative example data
[~,idx]=sort(mean(data(:,20:25),2));
figure; imagesc(data(idx,:));
caxis([-.35 .35]);
ylim([1979 2001])
图例:imagesc 复制到 Illustrator (CMYK) 文件中:
- A:在matlab中复制带有
print('-clipboard','-dmeta')选项的图形(在ylim([1980 2000])之后) - B:通过抓屏复制图(
ylim([1980 2000])之后) - C:有问题的图:完整的 y 比例图:
ylim([0 2000]),用print('-clipboard','-dmeta')复制到 Illustrator,然后手动放大。“宏观视图”似乎不能很好地反映实际数据(例如第 1984 行在放大中重复)
【问题讨论】:
-
我的猜测是复制到剪贴板功能会复制屏幕的内容(并且会受到您的屏幕分辨率的影响)。如果以 300DPI 或更高的分辨率保存图形(使用导出并将渲染器设置为具有高 DPI 的光栅),是否得到相同的输出?
-
@lent2:你的意思是它并没有真正矢量化?
-
这是我的猜测,我认为 imagesc 的默认行为是绘制画布而不是保持数据矢量化。此画布的分辨率可能受您的屏幕限制(可能有其他设置/选项可以更改它),我将在下面发布解决方法
-
使用它来将您的图形导出为光栅格式以便在其他地方导入:mathworks.com/matlabcentral/fileexchange/23629-export_fig。这将产生比下面答案中的解决方案更好的结果。