Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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的imagesc不一致=>;插图画家_Matlab_Adobe Illustrator - Fatal编程技术网

与matlab的imagesc不一致=>;插图画家

与matlab的imagesc不一致=>;插图画家,matlab,adobe-illustrator,Matlab,Adobe Illustrator,这是我在Matlab和Illustrator(2018 CC)中遇到的一个反复出现的问题: imagesc如果粘贴在illustrator中,很多数据看起来都有点不同。从科学的角度来看,这似乎很危险,从严格的最终用户角度来看,这似乎很难理解 有人能从技术角度解释这是如何发生的吗 有没有办法以矢量化的形式(不失真数据)创建密集的图像 用于重现所述问题的代码,下面的屏幕截图详细说明了一些可见问题: rng default %for reproducability, ver: Matlab2020b

这是我在Matlab和Illustrator(2018 CC)中遇到的一个反复出现的问题:

imagesc
如果粘贴在illustrator中,很多数据看起来都有点不同。从科学的角度来看,这似乎很危险,从严格的最终用户角度来看,这似乎很难理解

  • 有人能从技术角度解释这是如何发生的吗
  • 有没有办法以矢量化的形式(不失真数据)创建密集的
    图像
  • 用于重现所述问题的代码,下面的屏幕截图详细说明了一些可见问题:

    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)文件中:

    • 答:使用matlab中的
      print('-clipboard','-dmeta')
      选项复制图形(在
      ylim([1980-2000])
      之后)
    • B:通过截图复制图形(在
      ylim([1980-2000])
      之后)
    • C:有问题的图形:全y比例图形:
      ylim([0 2000])
      ,使用
      print('-clipboard','-dmeta')
      复制到Illustrator,然后手动放大。“宏观视图”似乎不能很好地反映实际数据(例如,放大时复制了第1984行)

    由于
    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'
    选项
    打印
    来更改补丁分辨率。我想手册上说默认值是
    '-r150'

    编辑 使用以下代码在
    imagesc
    pcolor

    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');
    
    生成以下图像(也不是我所期望的):


    我猜“复制到剪贴板”功能会复制屏幕内容(并且会受到屏幕分辨率的影响)。如果以300DPI或更高的分辨率保存图形(使用导出并将渲染器设置为具有高DPI的光栅),是否会获得相同的输出?@lent2:你的意思是它实际上没有矢量化?这是我的猜测,我认为imagesc的默认行为是绘制画布,而不是保持数据矢量化。此画布的分辨率可能受您的屏幕限制(可能有其他设置/选项可以更改),我将发布一个解决方案如下使用此选项将图形导出为光栅格式,以便在其他地方导入:。这将产生比下面答案中的解决方案更好的结果。哇,在我手中,pcolor绘图看起来完全不同。。。我不能很好地在评论中发布图片,但如果你将pcolor和imagesc并排添加,它们看起来会有惊人的不同:-O这是怎么回事?这里的图形下采样,对于启用抗锯齿的复活节图形和光栅图形,它们看起来会有不同。两者都不“正确”,因为它们都不显示所有数据。