見出し画像

Python グラフ作成 matplotlib グラフの種類

Pythonで作成可能かつ、世の中でよく使われるグラフとその使い方を紹介する。データはirisを使用。

# モジュールインポート
print("実行環境")
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import itertools
!python -V
print('pandas ' + pd.__version__)
print('numnpy ' + np.__version__)
print('matplotlib ' +  mpl.__version__)
print('seaborn ' +  sns.__version__)
実行環境
Python 3.8.5
pandas 1.1.3
numnpy 1.19.2
matplotlib 3.3.2
seaborn 0.11.0
# データ読み込み
df = pd.read_csv('iris.csv')
# x,yにデータを割り振る
x = np.array(range(len(df)))
y_1 = np.array(df['y_1'])
y_2 = np.array(df['y_2'])
y_3 = np.array(df['y_3'])
y_4 = np.array(df['y_4'])
y_list = [y_1, y_2, y_3, y_4]
# データの確認
display(df.head())
display("データフレームの長さは" + str(len(df)))

データフレームの長さは150'

折れ線グラフ plot

何も考えずに簡単なグラフ作るならこれ。ラベルと軸設定のオプションは以降のグラフにも使用可能。

plt.figure(figsize=(12,8))
# グラフ生成
plt.plot(x, y_1, 
         label='y_1',
         alpha=1.0, ls='--', color='m', lw=1.5,
         marker='+', mec='y', mew=8, mfc='r', ms=1, 
         markevery=1)
# color = {'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'}
# marker = {‘o’, ‘v’, ‘^’, ‘<‘, ‘>‘, ‘s’, ‘p’, ‘h’, ‘*’, ‘+’, ‘x’}

# ラベル生成
plt.title("Title") #タイトル
plt.xlabel('X_label', labelpad = 10,  size = 10, rotation = -30) #横軸
plt.ylabel('Y_label', style ='normal', fontweight='bold') # 縦軸
# style = {'normal'. 'italic'. 'oblique'}
# fontweight = {'ultralight', medium', 'bold','black', etc...}
# rotation = {'vertical'. 'horizontal'. value}

# 軸詳細設定
plt.xlim(0, 160) #横軸min,max
plt.ylim(0, 10) #縦軸min,max
plt.xticks([0, 80, 160], # 横軸表示細かさ
           ['0'+'\n'+'min', '80'+'\n'+'center', '160'+'\n'+'max'], 
           rotation = 30, 
           size = 10)
plt.yticks(range(11)) #縦軸表示細かさ
plt.minorticks_on() #主軸の補助目盛表示
plt.grid(which ="both", axis="x", ls='--', lw=1) #横軸直行補助目盛表示
plt.grid(which="major", axis="y", ls='--', lw=1) #縦軸直行補助目盛表示
plt.hlines(6.5, 0, 160, colors='k', ls='-.', label='hlines') #任意の横軸直行線表示
plt.vlines(30, 0, 10, colors='k', ls='-.', label='vlines') #任意の縦軸直行線表示
plt.text(20, 9, 'text') #テキスト挿入
plt.legend(loc='upper right', borderaxespad=0.1 , fontsize=10); #凡例表示
# which = {'major'. 'minor'. 'both'}
# loc = {'best', 'upper right', 'lower left', 'center', etc...}

# その他便利なオプション
# plt.xscale("log") #X軸をlogスケールへ変換
# plt.tight_layout() グラフのサイズが自動で最適化されるのでレイアウトで困ったらこれ
# オプション内のよく使う選択肢

散布図 scatter

通常

グラフがどのような分布になっているかを可視化するのに適している。以下の例では2つのデータを同一グラフに色を変えて描くことでそれぞれの分布が異なることが一目でわかるようになる。

plt.figure(figsize=(12,8))
plt.scatter(x, y_1, 
            s=50, # サイズ
            c='r', # カラー
            marker='o', # 形
            alpha=1, # 透明度
            linewidths=1, #枠線の太さ
            edgecolors='b') #枠線の色
plt.scatter(x, y_2, 
            s=50,
            c='b',
            marker='o',
            alpha=0.3, 
            linewidths=1,
            edgecolors='y')

カラーマップ

ある地点の数値の大きさ(電位とかエネルギーとかの大きさがイメージしやすい)などを散布図のカラーマップを使うとわかりやすい表現ができる。

# データフレーム数分の0~1までの数値を生成
rvalue = np.random.rand(len(df))

# グラフ生成
plt.figure(figsize=(12,8))
plt.scatter(x, y_1, c=rvalue, # x,yの各点に0~1までのランダムな数を与える
            s=50, # サイズ
            marker='o', # 形
            cmap='gist_ncar_r', # カラーマップの種類。プリセットがめっちゃある
            vmin=0, # 色のスケールの最小値
            vmax=1) # 色のスケールの最大値

# カラーバーを表示
plt.colorbar();

# カラーマップの種類一覧
# cmap = {'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 
# 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 
# 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 
# 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 
# 'OrRd_r', 'Oranges', 'Oranges_r', 'PRGn', 'PRGn_r', 
# 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r', 'Pastel2', 
# 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r', 
# 'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples', 
# 'Purples_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 
# 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 
# 'RdYlGn_r', 'Reds', 'Reds_r', 'Set1', 'Set1_r', 'Set2', 
# 'Set2_r', 'Set3', 'Set3_r', 'Spectral', 'Spectral_r', 
# 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu', 'YlGnBu_r', 
# 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 
# 'afmhot', 'afmhot_r', 'autumn', 'autumn_r', 'binary',
# 'binary_r', 'bone', 'bone_r', 'brg', 'brg_r', 'bwr',
# 'bwr_r', 'cividis', 'cividis_r', 'cool', 'cool_r',
# 'coolwarm', 'coolwarm_r', 'copper', 'copper_r',
# 'crest', 'crest_r', 'cubehelix','cubehelix_r', 
# 'flag', 'flag_r','flare', 'flare_r', 'gist_earth',
# 'gist_earth_r', 'gist_gray', 'gist_gray_r', 
# 'gist_heat', 'gist_heat_r', 'gist_ncar', 'gist_ncar_r',
# 'gist_rainbow', 'gist_rainbow_r', 'gist_stern', 
# 'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 
# 'gnuplot', 'gnuplot2', 'gnuplot2_r', 'gnuplot_r',
# 'gray', 'gray_r', 'hot', 'hot_r', 'hsv', 'hsv_r', 
# 'icefire', 'icefire_r', 'inferno', 'inferno_r', 
# 'jet', 'jet_r', 'magma', 'magma_r', 'mako', 'mako_r', 
# 'nipy_spectral', 'nipy_spectral_r', 'ocean', 'ocean_r', 
# 'pink', 'pink_r', 'plasma', 'plasma_r', 'prism', 
# 'prism_r', 'rainbow', 'rainbow_r', 'rocket', 
# 'rocket_r', 'seismic', 'seismic_r', 'spring', 
# 'spring_r', 'summer', 'summer_r', 'tab10', 
# 'tab10_r', 'tab20', 'tab20_r', 'tab20b', 
# 'tab20b_r', 'tab20c', 'tab20c_r', 'terrain', 
# 'terrain_r', 'turbo', 'turbo_r', 'twilight', 
# 'twilight_r', 'twilight_shifted', 'twilight_shifted_r', 
# 'viridis', 'viridis_r', 'vlag', 'vlag_r', 'winter', 'winter_r' }

棒グラフ bar

plt.figure(figsize=(12,8))
plt.bar(x, y_1, # 変数の設定
        width=1, # 棒の太さ。デフォルト0.8
        color='y', # 棒の色
        edgecolor='w', # 棒の枠の色
        linewidth=1,	# 棒の枠線の太さ
#         tick_label=[], # X軸データの名称、リスト
#         xerr=0.3, # X方向エラーバー, 数値orリスト
        yerr=0.3, # Y方向エラーバー, 数値orリスト
        ecolor='r', # エラーバーの色
        capsize=10, # エラーバーの傘のサイズ
        align='edge') # X方向の位置{'center', 'edge'}
plt.xlim(0, 20) #横軸min,max
plt.ylim(0, 10); #縦軸min,max

ヒストグラム hist

データを集計してヒストグラム化する。積み上げの要否やグラフ向きも

plt.figure(figsize=(12,8))
# グラフ生成
plt.hist([y_1, y_2, y_3, y_4], # 使用するデータ
         label=['y_1', 'y_2', 'y_3', 'y_4'], #凡例表示用のデータ名
         bins=12, # ビンの数。区間分けの細かさ。
         range=(0, 10), # ビンの最小値と最大値, デフォルトは(y_1.min(), y_2.max())
         cumulative=False, # 累積ヒストグラムにする場合だけTrue
         width=0.8, # 棒の太さ。デフォルト0.8
         edgecolor='m', # 棒の枠の色
         linewidth=1,	# 棒の枠線の太さ
         histtype='bar', # ‘bar’ (通常), ‘barstacked’ (積み上げヒストグラム), 
                         # ‘step’ (線), ‘stepfilled ‘ (塗りつぶしありの線) 
         align='left', # X方向の位置 {'left', 'mid', 'right'}
         orientation='vertical', # グラフ向き 'horizontal'(横), 'vertical'(縦)
         color=['r', 'g', 'b', 'm'], #棒の色指定、複数データはリストで指定
         stacked=True);
plt.legend(loc='upper right', borderaxespad=0.1 , fontsize=10); #凡例表示

この記事が気に入ったらサポートをしてみませんか?