【问题标题】:inconsistencies with imagesc for matlab => illustratormatlab => illustrator 与 imagesc 不一致
【发布时间】:2020-12-07 21:49:33
【问题描述】:

这是我在使用 Matlab 和 Illustrator (2018 CC) 时反复出现的问题:

imagesc 的很多数据如果粘贴到 Illustrator 中看起来会略有不同。这在科学背景下似乎很危险,从严格的最终用户角度来看似乎很难理解。

  1. 有人能从技术角度解释一下这可能(或正在)发生的原因吗?
  2. 有没有办法以矢量化的形式创建密集的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。这将产生比下面答案中的解决方案更好的结果。

标签: matlab adobe-illustrator


【解决方案1】:

由于imagesc 似乎绘制了一个画布,另一种解决方案是使用pcolor,它每像素绘制一个补丁:

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;
h = pcolor(data(idx,:));
set(h, 'EdgeColor', 'none');
caxis([-.35 .35]);
% ylim([1979 2001])

这需要更多内存,而且在我的小笔记本电脑上需要几分钟才能复制到 Inkscape(我没有安装 Illustrator)。

或者,也可以使用'-r300' 选项到print 来更改补丁分辨率。我认为手册上说默认是'-r150'

编辑

使用以下代码生成imagescpcolor之间的比较

figure;
subplot(1, 2, 1);
h = pcolor(data(idx,:));
set(h, 'EdgeColor', 'none');
title('pcolor');
caxis([-.35 .35]);
set(gca(), 'layer', 'top')
% ylim([1979 2001])

subplot(1, 2, 2);
imagesc(data(idx,:));
title('imagesc');
set(gca(), 'YDir', 'normal');

产生以下图像(也不是我所期望的):

【讨论】:

  • 哇,我手中的 pcolor 情节看起来完全不同......我不能很好地在评论中发布图片,但如果你将 pcolor 和 imagesc 并排添加,它们看起来会大不相同:-O 这是怎么回事
  • 这里对图形进行了下采样,这对于启用抗锯齿的复活节图形和光栅图形看起来会有所不同。两者都不是“正确的”,因为两者都没有显示所有数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2013-12-27
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多