Pythonで3Dグラフの軸ラベル位置を変える
3Dグラフを描画した際に軸ラベルのフォントサイズを変更するとどうしても軸の値と被ってしまい,位置の調整でかなり時間を使ってしまったので備忘録がてら手法を記します.
3Dプロット
3Dプロットにはmatplotlibのpyplotとmpl_toolkitsのmplot3dを使います.
グラフの例としては力センサから得た値をベクトルとして3次元空間上に表現するとします.
(値は何でも良いです)
import matplotlib.cm as cm #カラーマップ import matplotlib.pyplot as pyplot import mpl_toolkits.mplot3d %matplotlib inline X = np.linspace(5,10,10) Y = np.linspace(0,20,10) Z = np.linspace(-20,20,10) figure = pyplot.figure(figsize=(10,10), facecolor='w') ax = figure.gca(projection='3d') xlabel = ax.set_xlabel("X-axis [N]") ylabel = ax.set_ylabel("Z-axis [N]") zlabel = ax.set_zlabel("Y-axis [N]") ax.set_xlim(-20,20) ax.set_ylim(-20,20) ax.set_zlim(-20,20) for i in range(len(X)): ax.plot([0,X[i]], [0,Y[i]], [0,Z[i]], "-^", color=cm.winter(200-(i+1)*20), ms=7, mew=0.5, lw=3) #3D空間上で原点が見にくいので,原点描画用 ax.plot([-21,21], [0,0], [0,0], "-", color="gray", lw=1, linestyle = 'dotted') ax.plot([0,0], [-21,21], [0,0], "-", color="gray", lw=1, linestyle = 'dotted') ax.plot([0,0], [0,0], [-21,21], "-", color="gray", lw=1, linestyle = 'dotted') #3Dグラフの視点の変更 ax.view_init(30, 30)
出力すると,
のようになります.
でもこのままだと,軸ラベルが非常に見にくいですよね.
軸の値と軸ラベルの大きさを調整してみます.
軸の値はax.tick_paramsを追加し,
ax.tick_params(labelsize = 13)
軸ラベルにfontsizeを追加することでフォントサイズがそれぞれ変わります.
xlabel = ax.set_xlabel("X-axis [N]", fontsize = 18) ylabel = ax.set_ylabel("Z-axis [N]", fontsize = 18) zlabel = ax.set_zlabel("Y-axis [N]", fontsize = 18)
変更後の全体は
import matplotlib.cm as cm #カラーマップ import matplotlib.pyplot as pyplot import mpl_toolkits.mplot3d %matplotlib inline X = np.linspace(5,10,10) Y = np.linspace(0,20,10) Z = np.linspace(-20,20,10) figure = pyplot.figure(figsize=(10,10), facecolor='w') ax = figure.gca(projection='3d') xlabel = ax.set_xlabel("X-axis [N]", fontsize = 18) ##fontsize追加 ylabel = ax.set_ylabel("Z-axis [N]", fontsize = 18) ##fontsize追加 zlabel = ax.set_zlabel("Y-axis [N]", fontsize = 18) ##fontsize追加 ax.set_xlim(-20,20) ax.set_ylim(-20,20) ax.set_zlim(-20,20) for i in range(len(X)): ax.tick_params(labelsize = 13)##tick_params追加 ax.plot([0,X[i]], [0,Y[i]], [0,Z[i]], "-^", color=cm.winter(200-(i+1)*20), ms=7, mew=0.5, lw=3) #3D空間上で原点が見にくいので,原点描画用 ax.plot([-21,21], [0,0], [0,0], "-", color="gray", lw=1, linestyle = 'dotted') ax.plot([0,0], [-21,21], [0,0], "-", color="gray", lw=1, linestyle = 'dotted') ax.plot([0,0], [0,0], [-21,21], "-", color="gray", lw=1, linestyle = 'dotted') #3Dグラフの視点の変更 ax.view_init(30, 30) plt.savefig("output2.jpg")
出力すると,
のようになり,軸ラベルが数値と被ってしまいます.
これではかなり不細工なので,軸ラベルの位置を調整したいと思います.
調整するには,
from matplotlib import rcParams rcParams['axes.labelpad'] = 16
を追加するだけでいけます.
rcParams['axes.labelpad'] はX,Y,Z全ての軸ラベルをまとめて調整することが可能です.
出力すると,
となり,軸ラベル全体でばっちりマージンがとれています.
rcParamsではmatplotlibのパラメータを調整することができます(下記サイトが参考になると思います).
qiita.com