我正在使用 pzmap.m 或 pzplot.m 绘制系统的闭环极点,无论您喜欢哪个。当我改变由 L 描述的变量时,我想看到极点和零点的移动。
该功能没有直接处理颜色。在示例中,您可以选择标准颜色,但不能提供自己的颜色。由于我必须在同一个图上多次绘图,我在 for 循环中为每次迭代创建一个句柄,并使用 findobj 来设置曲线的颜色。要获得颜色,我想要一个颜色栏。所以我使用 jet 来获取图表的颜色分布。但是市场规模保持不变,我有一个难看的数字。
MWE:
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轴标有刻度线。我想要一个正确的 colorbar 从蓝色到红色,颜色分布正确但多次尝试后无法获得。如果我可以减少混乱也会有所帮助。
答案 0 :(得分:1)
代码中有几个问题
/**
* Clones a raw buffer so as not to consume the original
* @param rawResponse the original {@link okhttp3.Response} as returned
* by {@link Response#raw()}
* @return a cloned {@link ResponseBody}
*/
private ResponseBody cloneResponseBody(okhttp3.Response rawResponse) {
final ResponseBody responseBody = rawResponse.body();
final Buffer bufferClone = responseBody.source().buffer().clone();
return ResponseBody.create(responseBody.contentType(), responseBody.contentLength(), bufferClone);
}
屏幕中绘制的内容实际上是h = findobj(gcf,'type','point');
类型的颜色!此外,'line'
不会返回任何内容,而是返回一组内容,因此您需要对其进行索引以设置属性。我修改过的代码看起来像这样:
h = findobj(gcf,'type','line');
PD:有很多理由不使用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;
!!请使用感知统一的色彩映射!