带有厚框的 GNU Octave 人物

Posted

技术标签:

【中文标题】带有厚框的 GNU Octave 人物【英文标题】:GNU Octave figure with thick frame 【发布时间】:2018-04-23 16:03:56 【问题描述】:

我正在尝试制作一个比用于网格的线更粗的框架/轴线的图形。我尝试用粗线绘制一个矩形来模仿图框。这几乎可以完美运行,但右下角效果不佳。线条不太好(见附件)。

这里有一个例子来说明问题:

plot (rand(1,5),'-o' , 'Linewidth',2); % plot some data
grid on % show grid lines (thin)
r = axis(); % find the coordinates of the figure frame
rectangle ( 'Position',[r(1) r(3) r(2)-r(1) r(4)-r(3)] , 'Linewidth',5 ) % plot the figure frame using thick lines
print ('test.png') % save to file

任何想法如何使这项工作?

【问题讨论】:

看起来你安装的gl2ps没有setlinecap到2。你有哪个gl2ps版本? 我不知道。我怎么知道? 【参考方案1】:

获取绘图的当前axes 对象并设置其linewidth 属性。

set(gca, 'linewidth', 5)

更新

尝试重叠轴以获得您想要的效果,就像在 cmets 中一样。这种方法会奏效,但可惜的是,通常会涉及调整以使事情正确。如果您有一个一致的用例,也许您可​​以使用脚本自动执行此操作。

% the "frame" axis
a = axes; 
a_pos = get (a, 'position')
set (a, 'color', 'black', 'xtick', [], 'ytick', []);

% the "white background" axis; sits on top of "a"'s black background
b = axes ()
set (b, 'position', a_pos + [0.01, 0.01, -0.02, -0.02], 'color', 'w', 'xtick', [], 'ytick', []);

% the "actual" axis; transparent so that its background is effectively from "b"
c = axes;
plot (c, rand(1,5),'-o' , 'Linewidth',2); % plot some data
set (c, 'position', a_pos, 'xgrid', 'on', 'ygrid', 'on', 'color', 'none');

【讨论】:

这也会增加网格线的线宽,这不是我想要的。此外,这会导致相同的“角落问题”,但这次是在帧的所有四个角落。 @mbrennwa 你是对的,我认为角落是一种八度音阶错误。关于网格线,您始终可以将空轴覆盖在另一个轴上;当hold 不够用时,这是一种非常常见的混合绘图元素的技术。我能想到的唯一其他选择是在您感兴趣的轴下方放置一个“黑色”轴。稍后我会举一个上面的例子。 覆盖轴的更新实现了我在问题中描述的内容。不过,它似乎比应有的复杂一点,只是为了避免八度音阶的怪癖,拐角处的线接头很差。将框架的厚度设置为给定的线宽也可能很棘手。不过谢谢! 同意。尽管如此,我的印象是,不良的线接头是 postscript 库的上游问题,而不是特定于八度音程的问题。我认为 matlab 的行为方式相同(但我可能错了)。编辑:啊,不,它没有。也许值得将其作为 octave 错误跟踪器中的错误报告?

以上是关于带有厚框的 GNU Octave 人物的主要内容,如果未能解决你的问题,请参考以下文章

GNU Octave的下载与安装

GNU Octave的下载与安装

识别 GNU Octave 中的变量类型

试图提取GNU Octave软件的提交日志

如何在 C/C++ 程序中嵌入 GNU Octave?

如何使用 Fink 在 Mac 上安装 GNU Octave?