我有一些数据图(简单的二维线),我想在上面一些更有趣的点周围添加圆圈。令人惊讶的是,matlab 似乎没有简单的方法来创建物理上的圆形。我在互联网上查看,我发现的大多数答案是使用rectangle('Curvature',[1 1])
orpts = 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 我知道,如果我调整绘图大小或向其中添加更多内容并更改缩放比例,圆圈将随着整个绘图重新缩放。在我的情况下这不是问题 - 无需手动操作(无需调整窗口大小)即可打印出图形,我可以将它们添加为最后一个对象。