提问人:jvkloc 提问时间:6/5/2022 更新时间:6/5/2022 访问量:324
MATLAB 散点图图例
MATLAB scatter plot legend
问:
我有一个 1738x6 矩阵 (),我从中绘制了第 6 列(y 轴)和第 5 列(x 轴)。我将第 6 列的值分为三类;前 100 名(红点)、后 100 名(蓝点)和其余(绿点)。我已经提取了这些高值和低值,它们在下面的代码中被调用。stock2
high100
low100
我知道我在图中只有一个 y 值,并且它包含三个不同的类别。但是我找不到一种方法来为绘图创建图例,以便它仅显示我的 y 值内部的红点和蓝点。所有尝试要么失败,要么显示一个绿点和图例的第一个标签。有人可以展示如何创建所需的图例吗?还有一个额外的问题:为什么使用颜色图时散点图中有一个?[]
figure
% color map
c = zeros(size(stock2,1),3);
middle = stock2;
[~,j] = sort(stock2(:,6),'ascend');
remove = j([1:100 end-99:end],:);
middle(remove,:)=[];
% other points are green so blue and red can be easily distinguished
% blue didn't seem to stand out from the default black dots
d=length(middle);
for i=1:d
c(i,2)=1;
end
% red
a=length(middle)+1;
aa=a+99;
for i=a:aa
c(i,1)=1;
end
% blue
b=length(middle)+length(high100)+1;
bb=b+99;
for i=b:bb
c(i,3)=1;
end
scatter(stock2(:,5),[middle(:,6); stock2(high100,6); stock2(low100,6)],[],c,'.')
title('Stock2')
xlabel('Closing Price')
ylabel('Volume')
legend('100 highest volume days','100 lowest volume days')
答:
2赞
X Zhang
6/5/2022
#1
我在随机数据上模拟了你的想法。您可以查看保留、分散和图例的文档。
括号位于 size 参数的位置,当时可能使用了默认值。
stock2=sortrows(rand(300,6),6,'descend');
figure()
h=scatter(reshape(stock2(:,5),100,[]),reshape(stock2(:,6),100,[]),'.');
[h.MarkerEdgeColor]=deal('b','g','r');
title('Stock2')
xlabel('Closing Price')
ylabel('Volume')
legend([h(1),h(3)],{'100 highest volume days','100 lowest volume days'}, ...
'Location','northoutside','Orientation','horizontal');
评论
0赞
jvkloc
6/5/2022
我应该在我的问题中更具体。我知道我可以把多个情节叠加在一起,问题是关于传说的,因为只有一个情节。我从其他地方得到了答案,我会把它贴在这里作为答案。
1赞
X Zhang
6/5/2022
我没有完全理解你的意思,但在一次通话中压缩多个图已经足够简单了。我已经更新了示例代码以显示这一点。
0赞
jvkloc
6/6/2022
我的错,我正在编写我的第一个 MatLab 代码并感到困惑。我删除了我之前发布的答案,它令人困惑,并且没有提供任何您不会做的任何事情。
评论
c(1:d,2)=1