matplotlib グラフの設定
matplotlibのグラフの設定について
日本語の表示
日本語を表示する場合は、表示するごとにfontproperties = fpをセットする。
from matplotlib.font_manager import FontProperties fp = FontProperties(fname='C:\WINDOWS\Fonts\msgothic.ttc', size=14) plt.title("折れ線グラフ", fontproperties=fp)
グラフのタイトル
plt.title(str, loc='center')
・表示位置
loc='center' | 中央。デフォルト |
loc='left' | 左寄せ |
loc='right' | 右寄せ |
表示範囲(変域)
・両軸の表示範囲の取得
xmin, xmax, ymin, ymax = plt.axis()
・両軸の表示範囲の設定
plt.axis(xmin, xmax, ymin, ymax)
・軸ごとに範囲を設定
plt.xlim(xmin, xmax) plt.ylim(ymin, ymax) plt.xlim(xmax=10) # xminは変えずに、xmaxだけ変更 plt.xlim(xmin=0) # xmaxは変えずに、ximnだけ変更
軸
ax = plt.gca() # get current axis
ax.xaxis.set_ticks_position("bottom") # 目盛りは軸の下
・枠と目盛りを消去
plt.axis("off")
目盛り
・現在の横軸の位置配列、ラベル配列の取得
xlocs, xlabels = plt.xticks()
・現在の縦軸の位置配列、ラベル配列の取得
ylocs, ylabels = plt.yticks()
・目盛りの配分
plt.xticks(-4, 4, 9) # -4から4まで9個(8等分) plt.sticks([-1, 0, 1]) # -1, 0, 1の3つ
・目盛りの配分とラベルを同時に設定
plt.xticks(xlocs, xlabels, color, rotation) # xlocs:位置の配列 xlabels:ラベルの配列
グラフの枠線
・枠線を消す
ax = plt.gca() # get current axis ax.spines["right"].set_color("none") # 右消し ax.spines["left"].set_color("none") # 左消し ax.spines["top"].set_color("none") # 上消し ax.spines["bottom"].set_color("none") # 下消し
・枠線の色を変える
上記でset_color("blue")など
凡例
plt.plot(x, y, color=~, label="y=sin(x)") # 凡例の設定 plt.legend(loc="upper_left") # 凡例の表示
グリッドを表示する
plt.grid(color='gray')
水平線、垂直線、直線
・水平線をまとめて引く
plt.hlines(seq, xmin, xmax, colors="k", linestyle="solid", label="")
・垂直線をまとめて引く
plt.vlines(seq, ymin, ymax, colors="k", linestyle="solid", label="")
・直線を1本引く
plt.plot({x1, x2], [y1, y2])
・折れ線を引く
plt.plot(seqx, seqy)
・グラフの大きさ
inchで指定
plt.figure(figsize=(width,height), dpi=80)
・サブプロットに分ける
# グラフエリアを縦2、横3に分割してその1番目 plt.subplot(2, 3, 1) plt.plot(x, y1) # そのサブエリアに描画 # グラフエリアを縦2、横3に分割してfig配列、ax配列に格納 fig, ax = plt.subplots(2, 3) ax[0, 0].plot(x, y) # その0行0列目のサブエリアにプロット # サブエリアの大きさの比率を変える from matplotlib import gridspec gs = gridspec.GridSpec(2, 2, width_ratios=(6, 1), height_ratios=(4, 1)) plt.subplot(gs[0, 0]).plot(x, y) # 0行0列目にプロット
・グラフの塗りつぶし
plt.fill(x, y, color)
キーワードいろいろ
・線種linestyle, ls
solid | - | 実線 |
dashed | -- | 破線 |
dashdot | -. | 破点線 |
dotted | : | 点線 |
(offset, on-off-dash-seq) |
・線の幅 linewidth, lw
floatで単位はpoint
サンプル
サンプル1
import matplotlib.pyplot as plt import numpy as np from matplotlib.font_manager import FontProperties fp = FontProperties(fname='C:\WINDOWS\Fonts\msgothic.ttc', size=14) x = np.linspace(-np.pi, np.pi*1.1, 100) plt.plot(x, np.cos(x), "r", label="y=cos(x)") plt.plot(x, np.sin(x), "olive", label="y=sin(x)") plt.title("三角関数", loc="center", fontproperties=fp) plt.xlim(xmin=-np.pi) plt.ylim(-1.1, 1.1) xtick = np.array(["-π", "-1/2π", "0", "1/2π", "π"]) locs = np.linspace(-np.pi, np.pi, 5) plt.xticks(locs, xtick, color="c", fontsize=14, rotation=30) plt.yticks([-1, 0, 1]) ax = plt.gca() # get current axis ax.spines["right"].set_color("none") # 右枠消し ax.spines["top"].set_color("none") # 上枠消し ax.spines["left"].set_color("m") # 左枠をマゼンダに ax.spines["bottom"].set_color("c") # 下枠をシアンに plt.vlines(np.linspace(-np.pi, np.pi, 5), -1.1, 1.1, "c",linestyle=":", lw=1) plt.hlines([0], -np.pi, np.pi*1.1, "m", linestyle=":", lw=1) plt.legend() # 凡例の表示 plt.show()
サンプル2
import matplotlib.pyplot as plt import numpy as np from matplotlib.font_manager import FontProperties fp = FontProperties(fname='C:\WINDOWS\Fonts\msgothic.ttc', size=14) from matplotlib import gridspec x = np.random.randn(1000) y = np.random.randn(1000) gs = gridspec.GridSpec(2, 2, width_ratios=(6, 1), height_ratios=(4, 1)) ax = [plt.subplot(gs[0, 0]), plt.subplot(gs[0, 1]), plt.subplot(gs[1, 0])] # メインの散布図 ax[0].set_title("散布図", fontproperties=fp) ax[0].scatter(x, y, c="c", alpha=0.5) # 不透明度0.5 ax[0].grid() # グリッド表示 # 右側のヒストグラム ax[1].hist(y, 50, orientation="horizontal") ax[1].invert_xaxis() # 左右反転 ax[1].yaxis.tick_right() # 縦軸の目盛りを右側に配置 # 下のヒストグラム ax[2].hist(x, 100) ax[2].tick_params(labelbottom="off") plt.tight_layout() plt.show()
サンプル3
import matplotlib.pyplot as plt import numpy as np # 3x3の9個のサブプロットに分割 fig, axs = plt.subplots(3, 3, figsize=(8, 6)) t = np.linspace(0, np.pi*2, 100) for i in range(3): for j in range(3): axs[i, j].plot(np.cos(t*(i+1)), np.sin(t*(j+1)))
サンプル4
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-2, 2, 100) # 2x3の6個のサブプロットに分割 for i in range(5): plt.subplot(2, 3, i+1) plt.plot(x, x**i) plt.title("y=x^{}".format(i)) plt.tight_layout() plt.show()