Python 学習:Axes3D・surface

2014-07-23 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
3、3、1、1、0、 1、0、0、0、0(41)で、換算ポイント 65pt 。
特段のランク変動は無し?
・-・ - -・

さて、本文。

一昨日(2014-07-21)の記事:
Python 学習:3Dグラフ表示
で書いたコードで、
  取り敢えず、3Dグラフが表示できた。
ので、
色々試した事のまとめ。

“matplotlib”の“Toolkits”の“mplot3d”の“Axes3D”の“Surface plots”


先ずは、「import」

from mpl_toolkits.mplot3d import Axes3D # <===== これがメイン
from matplotlib.ticker import LinearLocator, FormatStrFormatter # <===== 軸の書式等
from matplotlib import cm # <===== 色マップ
import matplotlib.pyplot as plt # <===== グラフ・プロット
import numpy as np # <===== X, Y, Z 行列用


2番目の“LinearLocator”の他に“LogLocator”も有
また、“FormatStrFormatter”は、目盛の数値の桁数指定用


次に、座標データ ( X, Y, Z ) の用意

X = np.array( [ 1, 2, 3, 4 ] ) # <===== X 座標値が4点 ( 例 )
Y = np.array( [ 5, 6, 7 ] ) # <===== Y 座標値が3点 ( 例 )
X, Y = np.meshgrid( X, Y ) # <===== X, Y 共に、3行4列

Z = np.array( [ 3行4列のZ値 ] )


3行目の“meshgrid”により、X, Y 共に、3行4列となるが、
X == [ [ 1, 2, 3, 4 ],
     [ 1, 2, 3, 4 ],
     [ 1, 2, 3, 4 ] ]
Y == [ [ 5, 5, 5, 5 ],
     [ 6, 6, 6, 6 ],
     [ 7, 7, 7, 7 ] ]
の様に、行方向・列方向が対応する。
これで、グラフの{x,y,z}値は、X,Y,Z 行列の対応する要素を集めたモノになる。
尚、完全に格子状でなくても、
この例では3行4列であれば、表示は出来る。
例えば、X はそのままで、
Y == [ [ 5, 5.3, 5, 4.8 ],
     [ 6, 6.2, 6, 6.3 ],
     [ 7.9, 7, 7.5, 7 ] ]
であってもイイ。


最後に、表示

FIG = plt.figure( figsize=( 14, 10 ) ) # <===== グラフ表示領域サイズ
GR = FIG.gca( projection='3d' ) # <===== 3Dは、こうする?

SURF = GR.plot_surface( X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False )
# -------------------======= ??? ??? 色マップ 線太さ ???

GR.set_zlim( 0, 5 ) # <===== Z軸表示範囲 ( GR.set_xlimや、GR.set_ylim も有 )

GR.zaxis.set_major_locator( LinearLocator(6) ) # Z軸目盛:リニアで、tick個数
GR.zaxis.set_major_formatter( FormatStrFormatter('%.2f') ) # Z軸目盛:数値表示桁数
# ======= xaxis や、yaxis も有

FIG.colorbar( SURF, shrink=0.5, aspect=10 ) # <===== 凡例の長さ・幅

plt.show()


“rstride=1”“cstride=1”良く分からないが、このまま。
“shrink”値が小さいと長さは短くなる。
“aspect”値が大きいと幅は細くなる。


尚「mplot3d tutorial」には、

Line plots ・・・・・・・ Axes3D.plot( xs, ys, *args, **kwargs )
Scatter plots・・・・・・ Axes3D.scatter( xs, ys, zs=0, zdir='z', s=20, c='b', *args, **kwargs )
Wireframe plots・・・・・ Axes3D.plot_wireframe( X, Y, Z, *args, **kwargs )
Surface plots・・・・・・ Axes3D.plot_surface( X, Y, Z, *args, **kwargs )
Tri-Surface plots・・・・ Axes3D.plot_trisurf( *args, **kwargs )
Contour plots・・・・・・ Axes3D.contour( X, Y, Z, *args, **kwargs )
Filled contour plots ・・ Axes3D.contourf( X, Y, Z, *args, **kwargs )
Polygon plots・・・・・・ Axes3D.add_collection3d( col, zs=0, zdir='z' )
Bar plots・・・・・・・・ Axes3D.bar( left, height, zs=0, zdir='z', *args, **kwargs )
2D plots in 3D
Text ・・・・・・・・・・ Axes3D.text( x, y, z, s, zdir=None, **kwargs )
Subplotting


がある。


本日はここまで。


Python 学習は続く???


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


140720
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク