保存的 EPS 图像与绘制的图表不同

Posted

技术标签:

【中文标题】保存的 EPS 图像与绘制的图表不同【英文标题】:Saved EPS image different than plotted chart 【发布时间】:2010-02-17 12:29:46 【问题描述】:

我正在 matlab 中创建一些绘图,然后将其保存为 EPS 图像。

重要的是,我创建了一组 4 张图像,从第一张图像中获取“YLim”值,然后将其设置为其他 3 张图像。我这样做是为了对集合中的每个图像强制使用相同的 Y 轴限制。

所以对于第一张图片,我创建了一些图形,在其上绘制了一些东西,并将其作为YLim 属性:

    f = figure('position', [50, 70, 900, 700], 'Units', 'normalized'); 
    p = plot(s+n, 'k');
    set(gca, 'XLim', [0, 2048]);
    set(gca, 'XTick', 200:400:1800);

    ylim = get(gca, 'YLim');

    saveas(gcf, 'some_name', 'epsc');

然后,对于接下来的 3 张图像,我还创建了图形,绘制了一些东西,并设置了所有需要的属性:

    f = figure('position', [50, 70, 900, 700], 'Units', 'normalized'); 
    p = plot(s, 'k');
    set(gca, 'XLim', [0, 2048]);
    set(gca, 'XTick', 200:400:1800);

    set(gca, 'YLim', ylim)

    saveas(gcf, 'some_other_name', 'epsc');

现在,有什么奇怪的。 Matlab 正确显示这些图像并且它们都具有相同的 Y 轴限制(例如 -10:60)

但保存的 EPS 文件有不同的限制,例如,第一个为 -10:60,第二个为 -20:60。因此,换句话说,保存的 EPS 文件与显示的图表并不完全相同。

我做错了什么?

【问题讨论】:

ylim 是内置函数的名称。我不建议将其用作变量名。例如,您还可以使用 ylim([0 1]) 设置轴限制。 你对其他格式有同样的问题吗?哪个操作系统,Matlab 版本? 否,其他格式(例如 PNG)可以正确生成。我在win xp下使用Matlab 6.5 (R13)。 【参考方案1】:

我只是复制/粘贴了您的代码,其中sn 定义为rand(2048,1),我没有发现保存的EPS 文件有任何问题;正如预期的那样,y 范围都是 [0,2]...

首先确保仔细检查您的实际代码,然后也许您可以尝试将PaperPositionMode 属性设置为auto

set(gcf, 'PaperPositionMode', 'auto')

启用所见即所得的图形打印。

PS:您的数字似乎使用像素位置,这与指定的“标准化”单位相矛盾,但这与您的问题无关。

【讨论】:

您的解决方案(设置纸张位置模式)似乎解决了一个问题,但又产生了另一个问题。我正在为论文生成图像,并且我使用了非常大的字体大小(28)。使用您的解决方案后,限制似乎设置正确,但现在 Y 轴的文本标签(刻度)被剪裁了。 我只能要求你发布你正在使用的实际代码,因为上面的 sn-ps 对我来说是正确的,无论是否有 PaperPositionMode 选项(我在 WinXP 上使用 R2009b) 不需要。我手动强制轴的位置,现在似乎一切正常。感谢您的帮助。

以上是关于保存的 EPS 图像与绘制的图表不同的主要内容,如果未能解决你的问题,请参考以下文章

EPS是什么文件

EPS是什么文件格式

论文写作笔记

厉害了,用Python绘制动态可视化图表,并保存成gif格式

Pyecharts 绘制20钟不同风格的炫酷交互式图表,建议收藏

将图像从 Android 上的可绘制资源保存到 sdcard