Matplotlibで極座標図の作り方を勉強しました。 極座標を二次元から三次元に拡張すると、3Dの球を作成することができます。
今回は、三次元3Dの球の描写方法を勉強します。

3Dの球をMatplotlibで描写するには、三次元直交座標系の極座標の数式を使う必要がある

数学が苦手でしたら、何も考えずソースコードをコピーして貰えれば良いのですが、一応、ちゃんと三次元における極座標θ1とθ2及びsin, cos(三角関数)で考えると、球を数式で表現できるので、興味があれば、「球、極座標、数式」でGoogle検索して頂ければ、x,y,zの簡単な数式が見つかると思います。

では、以下が解説を含めたソースコードです。
import numpy as np import matplotlib.pyplot as plt #球の描写(projection="3d")のためには、 しっかりfigとaxを定義(subplot位置は111でOK。 #figsize=を正方形にしないと、間延びした図が作成されてしまうので注意。 fig = plt.figure(figsize=(5,5)) ax = fig.add_subplot(111, projection="3d") #球の定義 #2次元配列 np.mgrid[x開始点:x終点:x項数j,y開始点:y終点:y項数j] #np.mgridでは項数を指定する場合はjを、公差を指定する場合はj無しで定義 theta1,theta2 = np.mgrid[0:2*np.pi:30j,0:2*np.pi:30j] #mgrid関数でmesh gridを定義 x = np.cos(theta1)*np.sin(theta2) + 0.5 #xの極座標表示 x=r*sin(theta2)cos(theta1) y = np.sin(theta1)*np.sin(theta2) + 0.5 #yの極座標表示 y=r*sin(theta1)cos(theta2) z = np.cos(theta2) #xの極座標表示 y=r*cos(theta1) #plot_surface(面)とplot_wireframe(グリッド線)の両方の描写を知っておくと便利。 #ax.plot_surface(x, y, z,rstride=1, cstride=1, cmap='hsv') #shade=False ax.plot_wireframe(x, y, z, color="skyblue", linewidth=0.5) #linewidthは細め # label, grid, tickをfor文で設定 for a in [ax.xaxis, ax.yaxis, ax.zaxis]: a.set_ticklabels([]) #x,y,z軸の目盛り値非表示 a._axinfo['grid']['linewidth'] = 0.2 #gridの幅 a._axinfo['grid']['color'] = "gray" #gridの色 a._axinfo['tick']['inward_factor']=0 #目盛り軸位置の目盛り線内側削除 a._axinfo['tick']['outward_factor']=0 #目盛り軸位置の目盛り線外側削除 # 目盛り軸線を削除 for a in [ax.w_xaxis, ax.w_yaxis, ax.w_zaxis]: a.line.set_linewidth(0) plt.savefig("logo4.png") plt.show()
これを出力すると、以下の図になります。
logo4
かっこいい:D

軸や目盛りを消すのに少し工夫が必要

球の描写自体は、上記のソースコードの半分で済むのですが、綺麗な図としてカッコよく描写するには、軸や目盛りをしっかり消す必要がありました。その設定が、ソースコード後半部分になります。
上記のようにfor文でまとめて書くと、少し判りづらくなりますが、とってもスマートですよ:)

時間に余裕があれば、for文の中を1行ずつコメントアウト#しながら、どの行がどんな描写に対応しているのか確認してみてください。

この図もInstagramに投稿しようと思います:)