1

3つの数値に加えて、データにはカテゴリ値(0または1)が含まれており、3D散布図を使用してデータを表示したいと考えています。csvファイルからデータを読み取り、次の方法で散布図を作成する関数を作成しようとしました。

function f = ScatterPlotUsers(filename)

    data = ReadCSV(filename);
    x = data(:,2);
    y = data(:,3);
    z = data(:,4);

    size = ones(length(x), 1)*20;
    userType = data(:,5);
    colors = zeros(length(x), 1);

    a = find(userType == 1);
    b = find(userType == 0);
    colors(a,1) = 42; %# color for users type a
    colors(b,1) = 2;  %# color for users type b

    scatter3(x(:),y(:),z(:),size, colors,'filled') 
    view(-60,60);

私が実際にやりたかったのは、aを赤に、bを青に設定することでしたが、色の値(例では42と2)に関係なく、ドットの色は変わりません。誰かがいくつかのカテゴリ値(この場合は0と1のみ)の特定の色を決定する正しい方法を知っていますか?

4

2 に答える 2

2

あなたはそれを正しくやっています、しかし、カラーマップエントリー42と2が赤と青を参照していると確信していますか?RGB値を明示的に与えることを試みることができます:

colors = zeros(length(x), 3);
colors(userType == 1, :) = [1 0 0]; %# colour for users type a (red)
colors(userType == 2, :) = [0 0 1]; %# colour for users type b (blue)

また、 Matlabコマンドでもあるsizeため、変数の名前を変更することをお勧めします。sizeMatlabはそれについて混乱するかもしれません、そしてあなたのコードの将来の読者は確かにそれについて混乱するでしょう。

于 2012-10-03T11:47:28.727 に答える
2

特にuserType値が0から始まり、増加する場合は、カラーマップを使用します。

% Read in x, y, z, and userType.

userType = userType + 1;

colormap(lines(max(userType)));

scatter3(x, y, z, 20, userType);

特定の色が必要な場合はlines(...)、マトリックスに置き換えてください。たとえば、3つのユーザータイプがあり、それらを赤、緑、青にしたい場合は、次のようにします。

colormap([1, 0, 0;
          0, 1, 0;
          0, 0, 1]);

他のいくつかの注意:

に1を追加しuserTypeて、0ベースのインデックスから1ベースのインデックスに切り替えます。

size単一の値の配列を指定する代わりに、scatter3のパラメーターにスカラーを使用できます。

于 2012-10-03T12:18:50.910 に答える