• ベストアンサー

Mathematicaでの等高線

お世話になります. Mathematicaという数式処理ソフトで3D散布図に等高線を入れる方法を教えてください. 3D散布図のX,Y,Zの数値データは下記のようにcsv形式で手元にあります.  X Y Z  1 1 1  1 1 2  ・ ・ ・  ・ ・ ・  ・ ・ ・ Show関数と,Graphics3D関数を使用して1データごとにプロットして3D散布図を作成しています. 出来上がった散布図のグラフに対して,等高線を追加したいのですが,その方法が分からずに困っています. 方法をご存知の方は,ご教授頂けましたら幸いです. よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • sanze_hui
  • ベストアンサー率100% (6/6)
回答No.2

すみませんが、やはり求めたいグラフがどんなものか今ひとつイメージできません。 3D散布図、というのは3次元空間内に散らばった点(0次元)の集まりなので、そもそも等高線(線なので1次元)を引くことができません。 適当な方法で補間して3次元曲面(面なので2次元)にして初めて、その曲面(例えばz == f[x, y])とz == 0.5などの方程式1本を連立させて次数を1つ減らし、1次元である等高線(f[x, y] == 0.5)を求めることができます。 一般に等高線の数式、というのは陰関数の形式でf[x, y] == k(k:定数)と表すことができます。 しかしf[x, y]が解析的に与えられる場合でも陽関数として表示できることはそう多くはないでしょうし、まして今回はデータからf[x, y]を生成しますので、まず無理です。補間の仕方によっても変わります。 ちなみに等高面、というとf[x, y, z] == k(k:定数)で表される面のことになります。 変数がx, y, zの3つで方程式が1本なので、2次元の面になります。 ListPlot3Dというのは、3次元の点の集まりを補間して3次元曲面を生成する関数です。 これで生成した3次元曲面に対する等高線は解答#1で示したような方法で等高線を表示できます。 画像検索などで、作りたいグラフに近いものを示していただければ力になれるかもしれません。

temo891
質問者

お礼

お返事が遅くなって,すみません. 丁寧な回答ありがとうございます. 自分が少し勘違いしていたようです. 教えて頂いた内容を参考に目的を達成することが出来ました.

その他の回答 (1)

  • sanze_hui
  • ベストアンサー率100% (6/6)
回答No.1

3D散布図に等高線を追加したグラフ、というのがどういうグラフになるのかがイメージができませんでしたので、2パターン考えてみました。 3D曲面に対して等高線を引くことは、ListPlot3DのオプションにあるMeshFunctionsを使って z軸を基準にメッシュラインを引くように指定すればできますので、3D散布図に3D曲面の等高線を重ねあわせたものであれば、 data = Flatten[Table[{x, y, Sin[x^2 + y^2]}, {x, -2, 2, 0.1}, {y, -2, 2, 0.1}], 1]; Show[ ListPointPlot3D[data, ColorFunction -> "Rainbow"], ListPlot3D[data, MeshFunctions -> {#3 &}, Mesh -> 5, PlotStyle -> None] ]�������� という感じでできます。 3D散布図の底面に2Dの等高線図を書き加えたものの場合はちょっとうまい方法を思いつきませんでしたが、 Show[ ListPointPlot3D[data, ColorFunction -> "Rainbow", PlotRange -> {-1, 1}], Graphics3D[{Texture[ ListContourPlot[data, ContourStyle -> Black, ContourShading -> None, Frame -> None, PlotRangePadding -> None]], EdgeForm[], Polygon[{{-2, -2, -1}, {2, -2, -1}, {2, 2, -1}, {-2, 2, -1}}, VertexTextureCoordinates -> {{0, 0}, {1, 0}, {1, 1}, {0, 1}}]}] , Lighting -> "Neutral" ] という感じでどうでしょうか。 2Dグラフの部分はテクスチャとしてGraphics3DにPolygonとして埋め込んでみました。

参考URL:
http://reference.wolfram.com/language/ref/MeshFunctions.ja.html
temo891
質問者

補足

ご回答ありがとうございます. 説明が覚束なくて,申し訳ありません. 教えて頂いたメーカホームページで3D散布図の例として,以下のソースが公開されています. ListPointPlot3D[Table[Sin[j^2 + i], {i, 0, 3, 0.1}, {j, 0, 3, 0.1}]] http://reference.wolfram.com/language/ref/ListPointPlot3D.html 私がやりたいのは,このようなプロットに対して,X軸とY軸の値が異なるが,Z軸の値が等しい点を線で結んだグラフを作成することです. また,Z=AX+BY+Cのようにその等高線(等高面というべきでしょうか?)の数式も求めることが出来れば大変助かります. うまくお伝えできているでしょうか? ご教授頂いた方法を参考に,検討致しますが,もし,補足コメントをご確認頂いたことで,最適な方法がございましたら,お教え頂けましたら幸いです.

関連するQ&A