这是我想对轴做的参考。
https://i.stack.imgur.com/OqIG8.jpg
你能画出任意角度的极坐标吗?还是左上右下是唯一的选择?
51次观看(过去30天)
显示旧注释
接受的答案
亚当Danz
2020年9月28日
编辑:亚当Danz
2020年9月29日
这里有一个演示演示如何旋转直线对象和在极轴上的刻度。极轴的方向由uifig图中的uislider控制。滑块的回调函数更新
ThetaData
属性用于坐标轴上的所有对象。
限制和注意事项:
- 如果有任何绘图对象其角位置不是由“ThetaData属性(即文本对象),这将不得不适应工作与他们的位置属性。
- 自ThetaData所有对象的值都被更新,它们将不再保留原始值。例如,如果原来的值是0,它被旋转了15度,那么它的新值将是15。要获得原始的theta值,请查看滑块的用户数据属性,该属性存储相对于ThetaZeroLocation的当前极轴方向。
有关详细信息,请参阅内联注释。
为极坐标图创建数据
Th1 = linspace(0,pi*11/6,12);
R1 = cos(th1);
Th2 = linspace(5*pi/6,9*pi/6,20);
R2 = linspace(1,0.1,20);
创建极坐标图
对于此演示,此图只能包含具有
%角位置由'ThetaData'属性控制。
图= ufigfigure ();
Ax =极坐标(图);
(ax,“上”)
极坐标(ax, th1, r1,“b -”,“线宽”2);
极坐标(ax, th2, r2,“罗”,“MarkerFaceColor”,“r”);
极坐标(ax, 0, .9,“金伯利进程”,“MarkerSize”, 16岁,“MarkerFaceColor”,“y”)
标题句柄=标题(ax,“朝向:0度”);
%添加滑块和标签
ax.Position((2、4))= ax.Position((2、4))+(酒精含量,原来);
uilabel(图,“位置”, [20 60, 400,20],“文本”,'调整极轴的方向(deg from ThetaZeroLocation)');
您可以将“ValueChangingFcn”和“ValueChangedFcn”替换为同一个回调函数。
SLDR = uislider(图,“位置”, [20, 50, 520, 3],“价值”0,“限制”[-180180],...
“MajorTicks”180:30:180,“MinorTicks”[],“用户数据”0,...UserData存储当前旋转
“ValueChangingFcn”@ (sldr事件)updatePolarTicks (sldr、事件、ax titleHandle));
drawnow ();暂停(0.05)
定义滑块的回调函数来更新极轴的方向
%相对于TheatZeroLocation。
函数updatePolarTicks (sldr、事件、ax, titleHandle)
%更新标题和计算旋转量;在内存中存储新的方向。
titleHandle。字符串= sprintf(方向:%。0 f度', event.Value);
旋转=事件。值- sldr.UserData;% (+ = CCW, - = CW)
sldr。UserData = event.Value;
%将旋转角度转换为弧度,包装为[0,2pi]
dwrap = @ (d)国防部(d, 360) + (d > 0 &国防部(d, 360) = = 0) * 360;%包裹度到0:360
Deg = dwrap(旋转);
Rad = pi/180*deg;
%旋转线条对象
chil = ax.Children;
thData = get(child,“ThetaData”);
thDataRot = cellfun(@(c){c+rad},thData);
集(孩子,{“ThetaData”}, thDataRot)
%更新节拍
origTickLabs = ax.ThetaTickLabel;
[newTicks, tickLabIdx] = unique(dwrap(unique(mod(ax.ThetaTick,360),“稳定”) + deg));
斧子。ThetaTick = newTicks;
斧子。ThetaTickLabel = origTickLabs(tickLabIdx);
结束
更多答案(1)
Sindar
2020年9月28日
大概是这样:
Top_angle = 24;
%获得当前标签
Tt = taticks;
%旋转角度,使top_angle代替90
Tt_2 = mod(tt - 90 + top_angle,360);
thetaticklabels (tt_2)