pzmap or pzplot color handle for multiple plots
我正在使用pzmap.m或pzplot.m中的任意一个绘制系统的闭环极点。我想在更改由L表示的变量时看到极点和零点的运动。
该功能没有直接处理颜色的功能。在示例中,您只能选择标准颜色,而不能给出自己的颜色。由于必须在同一图形上绘制多次,因此我为for循环中的每次迭代创建一个句柄,并使用findobj设置曲线的颜色。要获得颜色,我要有一个颜色栏。因此,我使用jet来获取图形的颜色分布。但是市场规模保持不变,而且我有一个难看的数字。
MWE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | cb=jet(10); s=tf('s'); L_array=5:5:50; figure; hold on; for i=1:length(L_array) L=L_array(i); G=((58.2+11.7*L)*s^2*25^2+(3996.8 + 815.7*L)*s*25+815.7*25^2)/(s^2*(s^2*25^2+126.9*s*25+(3996.8+1.9*25^2))); CL=feedback(G,1); pzmap(CL); h = findobj(gcf,'type','point'); set(h,'markers',12,'color',cb(i,:)); clear L G CL h end grid; c=colorbar c.Label.String = 'L' |
如果运行它,您会发现大小没有变化,并且图形的两端都带有y标记的y轴看起来很疯狂。我想要一个合适的颜色条,从蓝色到红色,并且颜色分布正确,但是多次尝试后却无法获得它。如果我可以减少混乱,那也会有所帮助。
您的代码中有几个问题
-
h = findobj(gcf,'type','point'); 屏幕上绘制的内容实际上是'line' 类型的! - 每次迭代,您都将捕获所有要点,并在清除属性后清除它们,然后对其进行暗中修改。
此外,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | clear;clc cb=parula(10); s=tf('s'); L_array=5:5:50; figure; hold on; for i=1:length(L_array) L=L_array(i); G=((58.2+11.7*L)*s^2*25^2+(3996.8 + 815.7*L)*s*25+815.7*25^2)/(s^2*(s^2*25^2+126.9*s*25+(3996.8+1.9*25^2))); CL=feedback(G,1); pzmap(CL); end % lets do this in the end! % you will have length(L_array)*2 +1 items in h h = findobj(gca,'type','line'); for jj=2:length(h) set(h(jj),'MarkerSize',12,'Color',cb(floor(jj/2),:)); end grid; colormap(parula); % I am using parula, you can use jet, but I discourage it c=colorbar; |
PD:有很多原因不使用