5

私がやろうとしている表面プロットがあります。x は 11 要素のベクトル、ya は 300 要素のベクトル、za は 300*11 要素の行列です。

次のようにプロットしようとすると:

surf(x y z)

表面プロットは表示されません。軸はありますが、表面プロットはありません。 ブランク サーフェス プロット

ただし、何らかの理由で、次のようなマトリックスのサブセットの表面プロットを行う場合:

surf(x y(1:31) z(1:31,:))

その後、動作し、プロットが表示されます。 作業面プロット

括弧内の数を 32 に増やすとすぐに、機能しなくなります。範囲を 2:32 から変更すると機能するため、行列のサイズだけのデータとは関係ありません。

何が起きてる?どうすれば修正できますか?

PS コードを添付しますが、少し長くて複雑で、.txt ファイルをインポートして x および y ベクトルにロードします。

4

2 に答える 2

6

基本的に描画を実行するバックエンドである、Matlab の Figure レンダラーを変更すると役立つ場合があります。オプションはpainterszbuffer、およびOpenGLです。

これは図のプロパティであるため、特定の図に適用できます。たとえば、次のようになります。

set(gcf(), 'Renderer', 'painters')

または、デフォルトの Figure プロパティを更新します (常に必要な場合は、ユーザー固有の startup.mに入れることができます)。

set(0, 'Renderer', 'painters')

同様に、レンダラーの現在の状態を取得するには、get代わりにset次を使用します。

get(gcf(), 'Renderer')

レンダラーが異なれば、パフォーマンス プロパティOpenGLも異なります (サポートされている場合、レンダラーはハードウェア アクセラレーションを使用できます) だけでなく、癖も異なります (私の経験では、getframe() を使用したフレーム キャプチャは、リモート デスクトップ ログインを使用しているときに一部のレンダラーで動作しますが、すべてではありません)。問題の正確な理由はわかりませんが、これらの奇妙な癖の 1 つかもしれないので、レンダラーを変更してみてください。

Renderer プロパティのドキュメントから:

スクリーンと印刷に使用されるレンダリング方法。MATLAB グラフィックスのレンダリングに使用する方法を選択します。選択肢は次のとおりです。

painters— MATLAB が使用する元のレンダリング方法は、Figure に単純または小さなグラフィックス オブジェクトのみが含まれている場合に高速です。

zbuffer— MATLAB はグラフィックス オブジェクトをより高速かつ正確に描画します。これは、オブジェクトをピクセル単位で色付けし、MATLAB がシーンで表示されているピクセルのみをレンダリングするためです (したがって、前後の並べ替えエラーが排除されます)。MATLAB が複雑なシーンを表示している場合、このメソッドは大量のシステム メモリを消費する可能性があることに注意してください。

OpenGL— OpenGL は、多くのコンピューター システムで使用できるレンダラーです。このレンダラーは通常、ペインタや zbuffer よりも高速であり、場合によっては、MATLAB が一部のシステムで利用可能なグラフィックス ハードウェアにアクセスできるようになります。

于 2012-07-23T17:35:37.283 に答える
1

左側 (y 軸) と上部 (z 軸) に沿った軸の最小/最大値の変化を調べます。まだあると思いますが、とても小さいです。

後で次のように軸を設定してみてください。 axis([6E-6 8E-6 9.2E14 10E14 0.96 1.06 -1 1])

注: E-6 は E-8 である可能性があります。画像からはわかりません...

これは、次のコードに基づいています。axis([xmin xmax ymin ymax zmin zmax cmin cmax])

于 2012-07-23T16:49:47.177 に答える