以前の記事で、かっこよく散布図を極座標に描写する方法を勉強しました 今回は、散布図にヒストグラムをつけて、同時に描写していかにも分析している感のある図を作ってみました。

少々面倒だけど、一度描写領域(3つの図)を作れば、あとは使いまわせる

それでは早速ソースコードです。1行1行解説を加えています。説明を省けば、20行以内に収まるくらい簡単ですよ:) 
import matplotlib.pyplot as plt import numpy as np np.random.seed(1) #計算の再現性を担保するため、初期乱数を1に設定 x = np.random.randn(1000) #乱数を1000個生成 y = np.random.randn(1000) #乱数を1000個生成 #グラフプロットの定義### def scatter_hist(x, y, ax, ax_histx, ax_histy): ax_histx.tick_params(axis="x", labelbottom=False) #x軸ラベル無し ax_histy.tick_params(axis="y", labelleft=False) #y軸ラベル無し ax.scatter(x, y) #散布図のプロット binwidth = 0.25 #bin(ビン)は、ヒストグラムにおいてバー1本の事。ここでbinの値幅を定義。 xymax = max(np.max(np.abs(x)), np.max(np.abs(y))) #xとyの最大値を定義 lim = (int(xymax/binwidth) + 1) * binwidth #ヒストグラムの横軸を定義 bins = np.arange(-lim, lim + binwidth, binwidth) #binの個数を定義 ax_histx.hist(x, bins=bins) #xについてのヒストグラム作成 ax_histy.hist(y, bins=bins, orientation='horizontal') #yについてのヒストグラム作成 ################# left, width = 0.1, 0.65 #散布図の左余白と、幅を定義 bottom, height = 0.1, 0.65 #散布図の下余白と、高さを定義 spacing = 0.02 #散布図とヒストグラムの間隔 fig_scatter = [left, bottom, width, height] #散布図の定義 fig_histx = [left, bottom + height + spacing, width, 0.2] #上のヒストグラムの定義 fig_histy = [left + width + spacing, bottom, 0.2, height] #右のヒストグラムの定義 fig = plt.figure(figsize=(8, 8)) #描写領域を正方形で生成 ax = fig.add_axes(fig_scatter) #図1として散布図領域を生成 ax_histx = fig.add_axes(fig_histx, sharex=ax) #上のヒストグラム領域を生成 ax_histy = fig.add_axes(fig_histy, sharey=ax) #右のヒストグラム領域を生成 #最後にscatter_histでまとめて描写 scatter_hist(x, y, ax, ax_histx, ax_histy) plt.savefig("logo20.png") plt.show()
これを出力すると、以下の図になります。
logo20
綺麗な図が描けました:D

 Matplotlibの図「ax_histx.hist」でヒストグラムが作れる。そして、「bin」という概念に慣れよう

ヒストグラムを作るとき、大切なのは、各バー1本の値幅を定義する「bin」という概念。binは、日本語の空き瓶と同じイメージのビンです。ビン1つに何個数値が入るか、という統計学でよく出てくる概念です。「ビン①には0〜10の値を入れる」と設定すれば、0〜10の値を持つ要素がこのビンに入ります。今回は、全てのビンを0.25間隔で、np.arange関数を使って用意しています。


このbinという概念は、統計学や気象学でよく出てくるので、要チェックですね。
知っていれば、簡単ですね。覚えておくと、何かと便利かもしれません◎


綺麗にできたので、この図もInstagramに投稿しようと思います:)