我有一些数据的图(简单的2维线),我想在它周围添加一些更有趣的点。令人惊讶的是,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我知道,如果我调整绘图大小或添加更多内容并更改缩放,圆圈将重新缩放整个绘图。这在我的情况下不是问题 - 图形被打印出来而没有手动操作(没有窗口调整大小),我可以将它们添加为最后的对象。
答案 0 :(得分:2)
另一种选择:
>> h = plot(rand(1,5),rand(1,5),'o');
>> set(h, 'MarkerSize', 100);
答案 1 :(得分:1)
如果您想要缩放不变的圆圈,可以使用scatter
命令。您也可以将尺寸设置得更小或更大。
散射(X,Y,S)绘制每个圆圈,其大小由S指定。要绘制 每个圆的大小相等,将S指定为标量。绘制每个 具有特定大小的圆,将S指定为长度相等的向量 到X和Y的长度。