我目前想拥有图表的图例,但是我正在绘制几条应该只有3种类型的行。
我目前的选择是在边界外使用虚拟情节,绘制相关数据并在结尾处调用图例。它有效但很容易出错。我想更新图例并选择一些图。
我尝试使用 let x = Immutable.List([Immutable.Record({
name: 'Steve'
})])
console.log('x', x) // undefined
,但后来出现了两个问题:
它仍然绘制5个句柄而不是3个。
它没有正确的线条样式&颜色。
有什么想法吗?
Bellow跟随代码(带有虚拟情节评论)和当前版本的图片给出了错误以及我想看的内容。
leg_handle.String
它给出了什么:
我期望拥有的内容:
我使用clear
figure()
hold on
%using
%dummy plot
% leg_text={'a','b','c'};
% plot(100,100,'-r')
% plot(100,100,'-b')
% plot(100,100,'-k')
for ii=1:20,
plot(1:11,linspace(0,ii,11),'-r')
end
for ii=30:50,
plot(1:11,linspace(0,ii,11),'-b')
end
for ii=70:80,
plot(1:11,linspace(ii,25,11),'-k')
end
Yaxl=[-1 80];
Xaxl=[1 11];
set(gca, 'Visible','on', ...
'Box','on', ...
'Layer','top',...
'Xlim',Xaxl, ...
'Ylim',Yaxl);
%using
% legend(leg_text)
%want to use
leg_hand=legend(gca,'show');
leg_hand.String=leg_hand.String([1 21 42]);
%extra comand will give the things that i wanted above
% leg_hand.String=leg_hand.String([1 2 3]);
尝试了this method,但这只提供了我已经使用过的[a,b,c,d]=legend
句柄。
答案 0 :(得分:2)
这个小小的解决方法应该可以胜任:
clear();
figure();
hold on;
h = gobjects(3,1);
for ii = 1:20
h(1) = plot(1:11,linspace(0,ii,11),'-r');
end
for ii = 30:50
h(2) = plot(1:11,linspace(0,ii,11),'-b');
end
for ii = 70:80
h(3) = plot(1:11,linspace(ii,25,11),'-k');
end
set(gca,'Box','on','Layer','top','Visible','on','Xlim',[1 11],'Ylim',[-1 80]);
legend(h,'A','B','C');
hold off;
实际上,我所做的很简单。我使用gobjects function创建了一个大小为3
的图形对象数组(每次迭代一个)。然后,在每次迭代中,我将最后绘制的行分配给其各自的数组占位符。最后,我使用之前存储的三个图形对象创建了图例。
可替换地:
clear();
figure();
hold on;
h1 = gobjects(20,1);
for ii = 1:20
h1(ii) = plot(1:11,linspace(0,ii,11),'-r');
end
h2 = gobjects(21,1);
for ii = 30:50
h2(ii-29) = plot(1:11,linspace(0,ii,11),'-b');
end
h3 = gobjects(11,1);
for ii = 70:80
h3(ii-69) = plot(1:11,linspace(ii,25,11),'-k');
end
set(gca,'Box','on','Layer','top','Visible','on','Xlim',[1 11],'Ylim',[-1 80]);
legend([h1(1) h2(1) h3(1)],'A','B','C');
hold off;
您可以创建一个图形对象数组,用于存储每次迭代生成的绘图处理程序。然后使用每个图形对象数组的第一个(基本上是任意)项创建图例。