多个图的pzmap或pzplot颜色句柄

时间:2016-10-12 14:53:45

标签: matlab plot colors

我正在使用 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 从蓝色到红色,颜色分布正确但多次尝试后无法获得。如果我可以减少混乱也会有所帮助。

1 个答案:

答案 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');类型的颜色!
  • 每次迭代,您都会抓住所有积分,在删除属性后用dimdediately修改它们。

此外,'line'不会返回任何内容,而是返回一组内容,因此您需要对其进行索引以设置属性。我修改过的代码看起来像这样:

h = findobj(gcf,'type','line');

enter image description here

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; !!请使用感知统一的色彩映射!