scatterで凡例がめっちゃ生成される問題
例えば以下のコードを実行した際,図1に示すようにすべての点についての凡例が生成されてしまう.
%Sample code1
Xdata=0:1:5
scatter(Xdata,1,"red",'Displayname','Data1')
legend()
しかし,ほとんどの場合,凡例は一つの系列に対して一つであってほしいと思う.
これを得るためには,以下のようにキチンとYDataについても指定すればよい.
%Sample code2
Xdata=0:1:5;
YData=ones([1,6]);
scatter(Xdata,Ydata,"red",'Displayname','Data1')
legend()
凡例がめっちゃ生成される原因
どうやら,Ydataを指定しない場合,XdataのそれぞれについてScatterオブジェクトが生成されることが原因であるようだ.
%Ydataを指定しない場合
s1=scatter(Xdata,1,"red",'Displayname','Data1')
%実行結果:6つのScatterが出来る
s1 =
1×6 Scatter 配列:
Scatter Scatter Scatter Scatter Scatter Scatter
%Ydataを指定する場合
s1=scatter(Xdata,Ydata,"red",'Displayname','Data1')
%実行結果:単一のScatterが出来る
s1 =
Scatter (Data1) のプロパティ:
Marker: 'o'
MarkerEdgeColor: 'flat'
MarkerFaceColor: 'none'
LineWidth: 0.5000
XData: [0 1 2 3 4 5]
YData: [1 1 1 1 1 1]
SizeData: 36
CData: [1 0 0]
MATLABの公式リファレンス(https://jp.mathworks.com/help/matlab/ref/scatter.html) には次のように書かれています.
"すべてのセットが同じ x 座標または y 座標を共有している場合は、共有している座標をベクトルとして、その他の座標を行列として指定します。ベクトルの長さは行列の次元の 1 つと一致していなければなりません"
つまり,今回の場合ではY座標がすべて1で共通であるとして,Xdataのセットについてプロットしたということになります.