【发布时间】:2013-06-21 21:51:16
【问题描述】:
我有一些数据图(简单的二维线),我想在上面一些更有趣的点周围添加圆圈。令人惊讶的是,matlab 似乎没有简单的方法来创建物理上的圆形。我查看了互联网,发现的大多数答案是使用rectangle('Curvature',[1 1]) 或pts = linspace(0,2*pi, 100); plot(sin(pts), cos(pts)); 并将绘图的纵横比固定为1。在我的情况下,轴的比例相差几个数量级,因此固定纵横比是没有选择的。
我尝试了不同的方法来获得正确的 x/y 比例因子,但我似乎仍然遗漏了一些东西。我目前的尝试是:
function hc = circle(x, y, xr)
gca_ylim = get(gca, 'ylim');
gca_xlim = get(gca, 'xlim');
gca_pos = get(gca, 'Position');
gcf_pos = get(gcf, 'Position');
gcf_ar = get(gca, 'DataAspectRatio');
%mod = gca_pos(4)/gca_pos(3) *abs(gca_ylim(2)-gca_ylim(1))/abs(gca_xlim(2)-gca_xlim(1))*gcf_pos(3)/gcf_pos(4);
mod = gca_pos(4)/gca_pos(3)*gcf_ar(2)/gcf_ar(1)*gcf_pos(3)/gcf_pos(4);
yr = xr*mod;
rectangle('Position',[x-xr,y-yr,xr*2,xr*mod*2], 'Curvature',[1,1]);
end
我得到的圆圈仍然有点拉长,我不知道为什么。如果有任何简单的方法可以在情节中获得圆圈 - 请分享。
PS 我知道,如果我调整绘图大小或向其中添加更多内容并更改缩放比例,圆圈将随着整个绘图重新缩放。在我的情况下,这不是问题 - 无需手动操作(无需调整窗口大小)即可打印出图形,我可以将它们添加为最后一个对象。
【问题讨论】:
标签: matlab matlab-figure