基本事項
複数のプロット
|
Matplotlib複数のプロットMatplotlib のモジュール Pyplot を使いひとつのページに複数のプロットの作成方法を示します. 目次基本事項概要Figure インスタンスを使った複数のプロットの大まかな作成手順は,以下のとおりです.
matplotlib.pyplot.figure() は,Figure インスタンスを返します.matplotlib はライブラリーで,pyplot はモジュール,figure() は関数です.このFigure インスタンスは,プロット機能を提供します. add_subplot() メソッドはその内部にサブプロットを作成します. とりあえずプロットMatplotlib を使った簡単な例を示します.三角関数 sin(x) のプロットです. 001 import numpy as np 002 import matplotlib.pyplot as plt 003 from mpl_toolkits.mplot3d import Axes3D 004 005 fig = plt.figure() 006 007 # ----- 第1プロット(左上) ----- 008 x1 = np.linspace(-10, 10, 128) 009 y1 = np.sin(x1) 010 plot_11 = fig.add_subplot(2,2,1) 011 plot_11.set_title("$y=\sin(x)$") 012 plot_11.set_xlabel(r"$\theta$ [rad]", fontsize=12, fontname='serif') 013 plot_11.set_ylabel("Amplitude", fontsize=12, fontname='serif') 014 plot_11.tick_params(axis='both', length=10, which='major') 015 plot_11.tick_params(axis='both', length=5, which='minor') 016 plot_11.set_xlim([-10, 10]) 017 plot_11.set_ylim([-1.2,1.2]) 018 plot_11.minorticks_on() 019 plot_11.plot(x1, y1, 'ro', markersize=5) 020 021 # ----- 第2プロット(右上) ----- 022 x2 = np.linspace(-10, 10, 512) 023 y21 = np.sin(x2) 024 y22 = np.sin(x2)/x2 025 rec = lambda x,n: 1.0/(2*n-1)*np.sin((2*n-1)*x)+rec(x,n-1) \ 026 if 1<=n else 0 027 y23 = rec(x2, 10) 028 plot_12 = fig.add_subplot(2,2,2) 029 plot_12.set_xlabel(r"$\theta$ [rad]", fontsize=12, fontname='serif', \ 030 fontweight='bold') 031 plot_12.set_ylabel("Amplitude", fontsize=12, fontname='serif', \ 032 fontweight='bold') 033 plot_12.tick_params(axis='both', length=10, which='major') 034 plot_12.tick_params(axis='both', length=5, which='minor') 035 plot_12.set_xlim([-10, 10]) 036 plot_12.set_ylim([-1.2,1.2]) 037 plot_12.minorticks_on() 038 plot_12.plot(x2, y21, 'r-', markersize=5) 039 plot_12.plot(x2, y22, 'g-', markersize=5) 040 plot_12.plot(x2, y23, 'b-', markersize=5) 041 042 # ----- 第3プロット(左下) ----- 043 t = np.linspace(-np.pi, np.pi, 512) 044 y31 = np.sin(2*t) 045 y32 = np.cos(3*t) 046 plot_21 = fig.add_subplot(2,2,3) 047 plot_21.set_xlabel("Amplitude", fontsize=12, fontname='serif') 048 plot_21.set_ylabel("Amplitude", fontsize=12, fontname='serif') 049 plot_21.tick_params(axis='both', length=10, which='major') 050 plot_21.tick_params(axis='both', length=5, which='minor') 051 plot_21.set_xlim([-1.2, 1.2]) 052 plot_21.set_ylim([-1.2,1.2]) 053 plot_21.minorticks_on() 054 plot_21.plot(y31, y32, 'b-', markersize=5) 055 056 # ----- 第4プロット(右下) ----- 057 x4 = np.linspace(-10, 10, 32) 058 y4 = np.linspace(-10, 10, 32) 059 x4_2D, y4_2D = np.meshgrid(x4, y4) 060 z4_2D = np.sin(np.sqrt(x4_2D**2+y4_2D**2))/np.sqrt(x4_2D**2+y4_2D**2) 061 plot_22 = fig.add_subplot(2,2,4, projection='3d') 062 plot_22.set_xlabel("x", fontsize=12, fontname='serif') 063 plot_22.set_ylabel("y", fontsize=12, fontname='serif') 064 plot_22.set_zlabel("z", fontsize=12, fontname='serif') 065 plot_22.tick_params(axis='both', length=10, which='major') 066 plot_22.tick_params(axis='both', length=5, which='minor') 067 plot_22.set_xlim([-10, 10]) 068 plot_22.set_ylim([-10, 10]) 069 plot_22.set_zlim([-1.2, 1.2]) 070 plot_22.minorticks_on() 071 plot_22.plot_surface(x4_2D, y4_2D, z4_2D, rstride=1, cstride=1, \ 072 linewidth=0.5, edgecolors='black') 073 074 # ----- スクリーン表示 ----- 075 fig.tight_layout() 076 plt.show() 077 078 # ----- pdf 作成 ----- 079 fig.savefig('plot4.pdf', orientation='portrait', \ 080 transparent=False, bbox_inches=None, frameon=None) 081 fig.clf()
このプログラムの動作は,以下のとおりです.Matplotlib でプロットしているコマンドは,009 — 010 に書かれています.
より深い情報figure()関数関数 matplotlib.pyplot.figure の引数は,次のとおりです. matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, **kwargs)
戻り値の Figure インスタンスは,バックエンドの new_figure_manager にも渡されます.これにより,カスタム Figure クラスを Pylab インタフェースにフックできます.追加の kwargs が Figure の init 関数に渡されます。 クラス Figureクラス Figure は,クラス Artist を継承しています. ページ作成情報参考資料モジュール「pyplot.py」のソースコードが良い資料です. 更新履歴
|