最終更新日:2022/10/16

ここでは、シンプルに1つの画面(背景)に1つのグラフを描画する方法を説明します。

この後、(1)1つの画面に1つのグラフの描画、(2)1つの画面に複数のグラフを描画、(3)グラフを重ねる、の順番で次節以降で進めていきます。

よく使うオプションも説明しますが、複数のグラフを描く場合にも用います。
また、次のリンク先の色やマーカーの指定、グラフの微調整はグラフの種類によらず、殆ど同様でとても重要です

A2. グラフの調整方法一覧, 3.2 見た目を変更する, 3.3 色を指定する(全てに共通)

【説明すること】

0. グラフ描画の基本形式

matplotlib から pyplot をインポートし、 plt.plot() でグラフを描きます。

plt.plot()とは、描くグラフの種類で、自分で指定します。種類とは、例えば、棒グラフ、ヒストグラム、散布図、円グラフなどです。

グラフの保存
グラフの保存はplt.savefig('filename.png')で、任意の場所に保存可能です。

グラフを画面に表示
plt.show()でグラフを表示します。

以下では、pyplotがインポートされていることが前提となります。つまり、下のコードが書かれていることが前提です。

主なグラフの形式は以下の通りで、よく使うのは、2.ヒストグラムと4.散布図です。

コードグラフの形式
1plt.plot()折れ線グラフ関数のグラフ
2plt.hist()ヒストグラム
3plt.bar()棒グラフ
4plt.scatter()散布図
5plt.pie()パイチャート(円グラフ)
図1:グラフの種類とコード

1. 折れ線グラフ plt.plot(X, Y)

plt.plot(X, Y, marker='o') でXの値、Yの値を指定します。

marker='o'を指定して、各点の見た目を変更できます。例えば、marker='o'で塗りつぶしの丸です。何も指定しない場合(デフォルト)は、マーカー表示なしです。

図2: 折れ線グラフの図

2. 関数のグラフ plt.plot(X, f(X))

関数を描く方法です。例えば、 \begin{equation}y=x^2\end{equation}の場合です。
x軸、y軸の関数を用意して、plt.plot(x, f(x))の形でplt.plot()に値を渡します。

以下ではnumpyを使って、x軸の値を用意し、yの値を関数で定義しています。
イメージは、x軸の値として-10から10までの範囲を100分割して(np.inspace()の部分)、小さな刻みでxの値のリストを作成し、それをyの関数に渡している感じです。

np.inspace()についてはnumpyのページで学習してください。
ざっくり言うと、np.linspace(a, b, n)でaからbまでを、n等分した値です。

y=f(x)のグラフ

【注意点】listをx軸としてもううまくいかない場合=>arrayにする。
x軸の値として、li_x2 = [s for s in range(10)]とするとうまくいきません(これはList)。もう1ステップ追加し、numpyを用いて、np.array(li_x2)とすればOKです(これはarray)。

A. 見た目の調整

見た目の調整を説明します。イメージ図として以下を参考にしてください。
この後、一覧で示しますが、まずは例として補助線を追加しましょう。

A1. x軸、y軸の補助線の追加

補助線を追加する場合は、plt.grid(), plt.xticks(), plt.yticks()で補助線を描きます。

以下では、x軸はnumpyで生成、y軸は関数を定義します。

補助線を追加したグラフ

A2. グラフの調整方法一覧

見た目の調整はオプションが非常に多いので、よく使うものだけを挙げます。

最低限、以下を知っていれば、うまく対応できます。クリックで拡大します。

特に重要なのは、1. グラフタイトル(表題): plt.title()、2. 軸のラベル:plt.xlabel(), plt.ylabel()、3. 軸の範囲(目盛りの最大・最小値): plt.xlim(), plt.ylim()、5. 補助線の表示: plt.grid() です。

グラフオプション一覧(★表をクリックで拡大)

これらを使って、 \begin{equation}y=x^2\end{equation}のグラフを描くと以下のようになります。コードと結果を示します。

補足1: x 軸の値の生成方法

plt.plot()でグラフを描く場合、x軸としてとる値を指定しなければなりません。
例えば、y=x^2のグラフは連続に見えますが、離散的な値(小さく区切ったxの値)をx軸の値として渡す必要があります。

では、どうやってx軸の値を作成するかというと、numpynp.arange()またはnp.linspace()を使います。


(1) np.arange(a, b, c) : a≤x<b の範囲を c (小数可能)刻み ⇒ [a, …, b-δ]

(2) np.linspace(a, b, n) : a≤x≤b の範囲を n等分 (点がn+1個できる)

【注意】よく間違える点:”.arrange()”(アレンジ)ではない。”.linespace()”(ラインスペース)ではない。


(1) np.arange(a, b, c)の例

【注意】range()(np.arange()ではない)では差分に小数を指定できません。

(2) np.linspace(a, b, c)の例

この結果を見て違和感を感じる方も多いのではないでしょうか。
それならば、np.linspace(0, 10, 11) を試してください(最後の10を11にする)。これが予想した結果ではないでしょうか。np.linspace()は、このように若干注意が必要です。しかし、正確なグラフが必要でない限り、あまり支障はありません。

3. ヒストグラム(histogram) plt.hist()

ヒストグラムはそれぞれの値(x)が出現する回数(y)(「頻度」)を棒グラフで表したものです。どんな数値がよく出るか、出ないか、その偏りの有無を見ます。

例えば以下の図では、ある店舗の(架空の)顧客データの年齢をヒストグラムにしています。年齢層を知りたいという事です。

横軸に年齢、縦軸に回数(頻度)を表示したもので、年齢の分布を表しています。この図から、45-50歳が一番多く、30代や70代は少ない事が読み取れます。

ヒストグラムを描く基本コードは、plt.hist(df['clm1'])です。

plt.savefig()で図を保存できます。この場合、plt.show()の前に書きましょう。

ここで'clm1'は頻度を表示したいもので、例えば、図の例では、(架空の)顧客データのうち、各人の年齢を格納したカラムです。

ヒストグラムの図

頻度を図にしたいカラムだけをplt.hist()に渡せば、x軸の区切りはPythonが自動でやってくれます。
例えば、図では、x軸を5歳刻みで、30歳から80歳までで、棒を分割しています。この部分のことです。

しかし、多くの場合は、その区切りを自分で指定したいはずです。

ですので、普通は plt.hist(df['age'], bins=, range=) のようにbins=range=という分割を指定するオプションを同時に指定します。

例えば、plt.hist(df['age'], bins=10, range=(30, 80))のように書きます。

3.1 重要なオプション

x軸の分割の方法(★クリックで拡大)
  • bins=
    既に説明したようにbin分割を表し、これが図の5歳刻みの年齢の幅 [30, 35, 40, …, 75, 80] に相当します。
  • range=
    上記のbinsの最大値、最小値を指定し、これが図の両端、30歳と80歳に相当します。

ビン分割についてはこちらを参照してください。
第8章 データ分析の為のデータ加工/8.2. ビン分割

3.2 見た目を変更する

以下のオプションで見た目を変更します。最初の3つはよく使います。

★クリックで拡大

3.3 色を指定する

color= で色が変更できます。以下が主なものです。
これは、他のグラフでも同じで、とてもよく使います。例えば、折れ線グラフの色の指定も、これらで行います。

★クリックで拡大

こららのオプションを指定すると、例えば以下のグラフが描けます。

4. 棒グラフ plt.bar()

棒グラフはplt.bar(x, y)で描けます。xとy(高さ)の値の両方を渡す必要があります。

これまでに説明したオプションも組み合わせると以下の棒グラフが描けます。ここでは、x軸のラベル(表示する値)として、A, B, C, …, J のようにしたいので、x_tickの書き方に少し工夫をしました。

実行した結果

補足2: 棒グラフの棒の上にy軸の値を書く方法

y軸の上にその値を表示したい場合があります。
この場合、簡単な方法はないので、既にある機能を組み合わせて実現することになります。
具体的に、以下の2つの機能をコードに追加します。

  • グラフ上に任意のテキストを表示する機能を利用
  • グラフ上の表示位置を指定する

少し難しいので、サンプルコードと結果を参考にしてください。
width=0.8plt.text(idx14- width/4, val14 +0.2, str(val14))が重要な部分です。

5. 散布図 plt.scatter()

1つのものに対して、2つの指標(x,y)がある場合に、その2つの関係をx-y平面に描画する方法で、 2つの間に関係があるかどうかを見ます

例1)学生の国語(x)と数学(y)の得点 => 国語と数学の得点に関係があるか?

例2) 気温(x)とアイスの売り上げ(y) => 気温とアイスの売り上げに関係があるか?

plt.scatter(xのデータ, yのデータ) で描画します。

散布図plt.scatter()でよく使うオプションは色とマーカーで、以下で指定します。

散布図のオプション(★クリックで拡大)

マーカーのサンプルは以下の通りです。

6. 円グラフ(パイチャート) plt.pie()

円で構成比率を表すグラフです。

plt.pie(x)で描きます。

よく使うオプションは以下で、特にstranglecounterclockが重要です。

よく馴染んだ表示にするならば startangle=90, counterclock=False の指定が必要です。

これを忘れると、(正しいのですが)予想と大分違うものが出てきます。

(★クリックで拡大)

6.1 円の一部を切り出したい場合

円の一部を切り出して表示したい場合は、explode=[0, 0, 0, 0, 0.1], shadow=Trueを指定します。

explode0.1は切り出す「程度」で、自由に設定可能。shadow=Trueで、影が出来て見やすくなります。