1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MATLABでscatterを用いてプロットした際に凡例が複数生成されてしまう現象について

Last updated at Posted at 2023-12-22

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のセットについてプロットしたということになります.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?