17

私はスキャッターをプロットしようとしています、次のようなものです:

scatter(coor(:, 2), coor(:, 3), 1, coor(:, 4));

問題は、プロットする座標の数が非常に多いことです(〜100 000)。プロットするのに長い時間がかかり、図をtiffにエクスポートしようとすると、matlabは数分間死んでしまいます...プロットを改善するための解決策、または少なくともtiffのエクスポートはありますか?

編集:言及するのを忘れました、3番目の座標(coor(:、4))はカラーコードです。

したがって、(上記のように)スキャッターを使用している場合、下の画像のようなものがあります。これはまさに私が見たいものです(非常に遅いため、エクスポートできません)。

スキャッター

私がする時:

plot3(coor(:、2)、coor(:、3)、coor(:、4)、'。')

効果はもうそれほどクールではありません(注:画像は同じ座標からのものではありません...):

ここに画像の説明を入力してください

4

4 に答える 4

23

プロットを使用できますが、すべてのポイントが同じ色になります。ただし、セットを異なるサブセットに分割し、それぞれを独自の色でプロットすることができます。

N = 100000;
x = rand(N,1);
y = rand(N,1);
C = sin(2*x)+y;

cdivs = 10;
[~, edges] = hist(C,cdivs-1);
edges = [-Inf edges Inf]; % to include all points
[Nk, bink] = histc(C,edges);

figure;
hold on;
cmap = jet(cdivs);
for ii=1:cdivs
    idx = bink==ii;
    plot(x(idx),y(idx),'.','MarkerSize',4,'Color',cmap(ii,:));
end

colormap(cmap)
caxis([min(C) max(C)])
colorbar

ここに画像の説明を入力してください

これは、ほぼ同じプロットを提供するよりもはるかに優れた応答scatter(x,y,1,C)を示しますが、色解像度が高くなります(上記のコードで調整可能です)。

于 2012-11-09T07:56:20.210 に答える
1

私の経験では、matlabで最も効率的なプロットコマンドはPatchであり、これを使用して、scatterまたはscatter3の機能をはるかに高い効率でエミュレートしました。

ポイントのリストがある場合は、各ポイントを使用して、特定のデータに対して適切なエッジ長の正方形のパッチ(または八角形など)を定義し、パッチを1回呼び出すだけでパッチのコレクションをプロットします。グラフィックオブジェクトが作成されたら、そのカラーデータを更新して、正方形に個別に色を付けることができます。

データセットからキューブまたは3Dクロスを作成することにより、3Dで同じ概念を使用できます。

このスニペットは、ランダムに配置された1e5の正方形を作成します。この場合はランダムな色で、4歳のラップトップで1秒弱で実行されます。同様のスキャッターの呼び出しには40秒かかり、操作が難しい扱いにくい図が返されます。

tic
P=rand(1e5,2);
Edge=.01;
X=[P(:,1)'; P(:,1)'+Edge; P(:,1)'+Edge; P(:,1)'];
Y=[P(:,2)'; P(:,2)'; P(:,2)'+Edge; P(:,2)'+Edge];
figure;
h=patch(X,Y,'r');
set(h,'facevertexcdata',rand(size(X,2),3),'facecolor','flat','edgecolor','none')
drawnow
toc
于 2013-07-16T23:08:27.517 に答える
0

はい、plot3を使用します

plot3(coor(:, 2), coor(:, 3), coor(:, 4), '.')

これは、3D散布図と同じように機能します(ポイントは小さなドットになります。必要に応じて使用することもでき'o' or 'x'ます)

于 2012-11-09T05:42:19.020 に答える
0

ポイントが多すぎる場合は、データを間引くのが理にかなっている場合があります。

基本的に、2つのアプローチを行うことができます。

  1. シンプル-選択するだけ-ランダムにポイントの10%と言います。

  2. 表示されないポイント、明らかに範囲外のポイントを破棄しますが、かなりの数のオーバーラップがある場合(たとえば、ポイントの直径を3pxにする必要がある場合)、ポイントはたとえば9pxをカバーします。私のマシンでは、あなたが投稿したようなプロットは-たとえば400x400pxになるので、ほとんどのceil(400*400/9) < 20 000データポイントが表示されます。


プロットをより小さなチャンクに分割することもできます-プロット1000ポイントのように、drawnow完了するまで次の1000を発行します。したがって、空白の画面の前で待つ必要はありません。

于 2012-11-09T09:58:22.397 に答える