带有厚框的 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 人物的主要内容,如果未能解决你的问题,请参考以下文章