Matplotlibの極座標で3D球を描写しました。
これに色が綺麗な散布図を組み合わせると、かっこいい図が作れました:)

かっこいい:D
綺麗にできた。この図もInstagramに投稿しようと思います:)
3Dの球をplot_wireframeで描写して、乱数で3次元散布図を作成
それでは早速ソースコードです。長そうに見えますが、前回の3Dの球の描写に乱数で散布図を追加これを出力すると、以下の図になります。import numpy as np import matplotlib.pyplot as plt
#spyder 4では「本文中に使われていない」という注意が出てくるが、以下1行が無いと、3Dプロットがされない
from mpl_toolkits.mplot3d import Axes3D
#球の描写(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) #xの極座標表示 x=r*sin(theta2)cos(theta1) y = np.sin(theta1)*np.sin(theta2) #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.3) #linewidthは細め #乱数で散布図を作成. randは一様乱数、randnは正規乱数 n = 500 x_scatter = np.random.randn(n)/3 #/3くらいにしないと、正規分布に従って、値が広がり過ぎちゃう y_scatter = np.random.randn(n)/3 #/3くらいにしないと、正規分布に従って、値が広がり過ぎちゃう z_scatter = np.random.randn(n)/3 #/3くらいにしないと、正規分布に従って、値が広がり過ぎちゃう T = np.random.rand(n) #色も乱数で指定 #plt.cm.jetが角度(theta値)によって色がグラデーションするテクニック scatters = ax.scatter(x_scatter,y_scatter,z_scatter,marker="o", c=plt.cm.jet(T),alpha=0.3) # 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) #グラフ値域を設定(乱数散布図では、異常値に合わせてグラフ表示域がわかってしまうので) ax.set_xlim([-1,1]) ax.set_ylim([-1,1]) ax.set_zlim([-1,1]) plt.savefig("logo9.png") plt.show()

かっこいい:D
散布図をプロットするとき、色をc=plt.cm.jet(T)とすると綺麗
散布図をプロットするとき、色をc=plt.cm.jet(T)をすると、グラデーション機能を使って、複数の色を描写できます。変数Tを乱数で生成するようにしておくのがポイント。また、透明度alphaを0.3〜0.5くらいに設定すると、上の同じような図になりますよ◎綺麗にできた。この図もInstagramに投稿しようと思います:)
コメント