グラフ描画
ヒストグラム、棒グラフ、折れ線グラフ、箱図、ヴァイオリン図、散布図の描画スクリプト例を用意した。
描画において日本語を用いるときは、ライブラリjapanize_matplotlibを用いている。インストールは、次のコマンドで行った。
pip install
japanize_matplotlib
描画スクリプト例のファイルを圧縮ファイルGraphsFiles.zipとしてまとめた。ダウンロード・解凍して、自由に利用されたい。
なお、<岡本安晴「いまさら聞けないPythonでデータ分析」丸善出版>で、グラフ描画の説明を行っている。
表A.1のテストの点数のデータの分布をヒストグラムで描いてみる。
表A.1 テストの点数
66 |
59 |
62 |
64 |
63 |
68 |
65 |
59 |
68 |
64 |
65 |
51 |
67 |
64 |
83 |
59 |
61 |
62 |
57 |
72 |
65 |
64 |
54 |
60 |
53 |
65 |
67 |
60 |
53 |
79 |
74 |
53 |
61 |
68 |
75 |
50 |
57 |
55 |
66 |
56 |
55 |
61 |
70 |
71 |
49 |
69 |
70 |
80 |
73 |
72 |
Pythonスクリプトは以下のようになる。リストdataに表A.1のデータが設定されている。
import matplotlib.pyplot as plt
data = [
66,59,62,64,63,68,65,59,68,64,
65,51,67,64,83,59,61,62,57,72,
65,64,54,60,53,65,67,60,53,79,
74,53,61,68,75,50,57,55,66,56,
55,61,70,71,49,69,70,80,73,72
]
plt.hist(data)
plt.show()
実行すると、図A.1のグラフが表示される。
図A.1
保存ボタンを押して保存した後、閉じるボタンを押して閉じると、プログラムの実行終了となる。
描画関数histのパラメータの設定で、グラフの表現を豊かにできる(図A.2)。
図A.2
図A.2のグラフは、次のスクリプトで描いたものである。
import matplotlib.pyplot as plt
import japanize_matplotlib
# 日本語表示用
data = [
66,59,62,64,63,68,65,59,68,64,
65,51,67,64,83,59,61,62,57,72,
65,64,54,60,53,65,67,60,53,79,
74,53,61,68,75,50,57,55,66,56,
55,61,70,71,49,69,70,80,73,72
]
plt.hist(data,
edgecolor='k',
# エッジの色
alpha=0.5)
# 色のα値(透明度)
plt.xlabel('点数', fontsize=16)
plt.ylabel('人数', fontsize=16)
plt.title('ヒストグラム', fontsize=18)
plt.savefig('Hist.png')
# 画像の保存
plt.show()
描かれたグラフ画像は、Hist.pngに保存されている。
図A.3のファイルは、気象庁のウエブサイトに公開されているデータから、2024年7月の東京都の日ごとの最高気温と最低気温のデータを読み取りExcelファイル気象庁最高最低気温.xlsxとしたものである。
図A.3
図A.3のファイル気象庁最高最低気温.xlsxを読み込み、最高気温を最低気温のヒストグラムを描くスクリプトをリストA.1のように書いてみた。
リストA.1のスクリプトを実行すると、図A.4のグラフが表示される。
図A.4
左側のグラフは、コード
plt.hist([H, L], color=['r', 'b'],
label=['最高気温', '最低気温'],
bins=np.arange(22, 39,2)) # bin(級)の境界値
により描かれたものであり、右側のグラフはコード
plt.hist(H, color='r', label='最高気温', alpha=0.5,
edgecolor='k', bins=np.arange(22, 39, 2))
plt.hist(L, color='b', label='最低気温', alpha=0.5,
edgecolor='k', bins=np.arange(22, 39, 2))
により描かれたものである。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
dframe = pd.read_excel('気象庁最高最低気温.xlsx')
H = dframe['最高気温'].values
L = dframe['最低気温'].values
plt.figure(figsize=(12,5))
# 描画画面のサイズ設定:横12、縦5
plt.subplot(1,2,1)
# 描画画面を1行2列に分割
# 1番目の分割画面に描画
plt.title('2024年7月の1日ごとの\n東京都の最高気温と最低気温', fontsize=16)
plt.hist([H, L], color=['r', 'b'],
label=['最高気温', '最低気温'],
bins=np.arange(22, 39,2)) # bin(級)の境界値
plt.xlabel('気温℃', fontsize=14)
plt.ylabel('日数', fontsize=14)
plt.legend(loc='upper center',
fontsize=12)
plt.tight_layout()
plt.subplot(1,2,2)
# 描画画面を1行2列に分割
# 2番目の分割画面に描画
plt.title('2024年7月の1日ごとの\n東京都の最高気温と最低気温', fontsize=16)
plt.hist(H, color='r', label='最高気温', alpha=0.5,
edgecolor='k', bins=np.arange(22, 39, 2))
plt.hist(L, color='b', label='最低気温', alpha=0.5,
edgecolor='k', bins=np.arange(22, 39, 2))
plt.xlabel('気温℃', fontsize=14)
plt.ylabel('日数', fontsize=14)
plt.legend(loc='upper center',
fontsize=12)
plt.tight_layout()
plt.savefig('HistTempTokyo.png') # 描画の保存
plt.show()
平成7年の国勢調査のデータを表B.1に示す。
表B.1 平成7年国勢調査
地域 |
東京都 |
鹿児島県 |
鳥取県 |
|
人口(万人) |
1177.4 |
179.4 |
61.5 |
78.1 |
表B.1の棒グラフを描くPythonスクリプトを以下のように用意した。
import matplotlib.pyplot as plt
import numpy as np
import japanize_matplotlib
xlabels = ['東京都', '鹿児島県', '鳥取県', '世田谷区']
yvalues = [1177.4, 179.4, 61.5, 78.1]
plt.title('平成7年国勢調査による', fontsize=20)
plt.bar(range(4), yvalues, tick_label
= xlabels)
plt.xticks(fontsize=18)
plt.yticks(np.arange(0,1201, 200),
fontsize=14)
plt.ylabel('人口(万人)', fontsize=20)
plt.tight_layout()
# グラフの表示項目が重ならないように調整
plt.savefig('BarPop.png') # 画像の保存
plt.show()
上のスクリプトを実行すると、図B.1のように棒グラフが描かれる。
図B.1
棒グラフを描く関数
plt.bar(range(4), yvalues, tick_label
= xlabels)
において、1番目の引数range(4)は棒の位置を与えるものである。N本の棒を描くときはrange(N)としておけば、たいていの場合はよい。第2引数yvaluesは各棒の高さである。引数tick_label = xlabelsは各棒の下に記すラベルである。
気象庁のウエブサイトに公開されているデータから、2024年7月の東京都の日ごとの最高気温と最低気温の平均値および四分位数を求めると表B.2のようになった。
表B.2 東京都の2024年7月の日ごとの最高気温と最低気温の四分位数と平均値 (気象庁のウェブサイトのデータから算出) |
||
|
最高気温 |
最低気温 |
第1四分位数 |
31.35℃ |
24.0℃ |
平均値 |
33.47℃ |
24.99℃ |
第3四分位数 |
35.6℃ |
26.15℃ |
表B.2のデータの棒グラフを描くスクリプトをリストB,1のように作成した。
リストB.1 表B.2の棒グラフの描画スクリプト
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
HL = ['最高気温', '最低気温']
Means = np.array([33.47, 24.99])
Q1s = np.array([31.35, 24.0])
Q2s = np.array([35.6, 26.15])
fig, ax = plt.subplots(1,1)
# 棒グラフ内に文字列を書き込むためにaxを設定
bc=plt.bar(HL, Means,
# 横軸と縦軸の値
yerr=[-Q1s+Means, Q2s-Means],
# エラーバー値、Meansからの距離(正値)
ecolor='r',
capsize=25,
# エラーバーの色とキャップサイズ
error_kw={'elinewidth':15}, # エラーバーの太さ
alpha=0.7)
# 棒グラフの透明度
# 棒グラフ内に文字列を書き込む
ax.bar_label(bc,labels=[f'{v:.1f}℃' for v in Means],
label_type='center', fontsize=20)
plt.xticks(fontsize=20)
plt.yticks(fontsize=15)
plt.ylabel('気温(℃)', fontsize=20)
plt.title('東京都2024年7月平均値', fontsize=20)
plt.tight_layout()
plt.savefig('TempHL.png')
plt.show()
リストB.1のスクリプトを実行すると図B.2のグラフが描かれる。
図B.2
棒グラフの高さは平均値を表すが、第1四分位数と第3四分位数は、エラーバーで表している。
東京都の人口推移は表C.1に示すようになっている。
表C.1 東京都の人口の推移。
東京都ホームページ(平成18年11月25日)による。
年次 |
人口(人) |
1880 |
959,596 |
1900 |
2,014,100 |
1920 |
3,699,428 |
1940 |
7,354,971 |
1960 |
9,683,802 |
1980 |
11,618,281 |
2000 |
12,064,101 |
表C.1の折れ線グラフを描くスクリプトを以下のように用意した。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
year = [1880, 1900, 1920, 1940, 1960,
1980, 2000]
population = [959596, 2014100,
3699428, 7354971, 9683802, 11618281, 12064101]
plt.title('東京都の人口', fontsize=16)
plt.plot(year, population, 'b-')
plt.xlabel('年', fontsize=14)
plt.yticks(np.arange(0, 12000001,
2000000),
[f'{v/1000000:.1f}' for v in np.arange(0, 12000001, 2000000)])
plt.ylabel('人口(百万人)', fontsize=14)
plt.tight_layout()
plt.savefig('FigTokyoPop.png')
plt.show()
表C.1のスクリプトを実行すると図C.1のグラフが描かれる。
図C.1
折れ線を描く関数の呼び出し
plt.plot(year, population, 'b-')
において、第1引数は横軸、第2引数は縦軸のデータであり、それぞれ対応する順番に並んでいる。第3引数'b-'はプロットの仕方を指定するもので、小文字bは青を、マイナス記号−は実線で描くことを意味している。詳しくは拙著<岡本安晴「いまさら聞けないPythonでデータ分析」丸善出版>で説明している。
なお、縦軸の目盛りは次のコードで設定している。
plt.yticks(np.arange(0, 12000001,
2000000),
[f'{v/1000000:.1f}' for v in np.arange(0, 12000001, 2000000)])
図C.2のファイルは、気象庁のウエブサイトに公開されているデータから、2024年7月の東京都の日ごとの最高気温と最低気温のデータを読み取りExcelファイル気象庁最高最低気温.xlsxとしたものである。
図C.2
図C.2のファイル気象庁最高最低気温.xlsxを読み込み、最高気温を最低気温のヒストグラムを描くスクリプトをリストC.1のように書いてみた。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
dframe = pd.read_excel('気象庁最高最低気温.xlsx')
D = dframe['2024年7月東京'].values
H = dframe['最高気温'].values
L = dframe['最低気温'].values
plt.title('2024年7月\n東京都の最高気温と最低気温', fontsize=16)
plt.plot(D, H, c='orange', label='最高気温')
plt.plot(D, L, c='b', label='最低気温')
plt.xlabel('日', fontsize=16)
plt.ylabel('気温(℃)', fontsize=14)
plt.legend()
plt.tight_layout()
plt.savefig('TokyoHLLines.png')
plt.show()
リストC.1のスクリプトを実行すると、図C.3のグラフが表示される。
図C.3
表D.1のデータの箱図を描く。
表D.1 グループAのデータ |
65 67 67 67 60 65 56 61 67 74 73 59 72 69 69 82 75 67 65 69 |
箱図を描くスクリプトは以下のようになる。
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sb
data = [65, 67, 67, 67, 60, 65, 56,
61, 67, 74,
73,
59, 72, 69, 69, 82, 75, 67, 65, 69]
sb.boxplot(data)
plt.title('箱図(縦向き)', fontsize=20)
plt.savefig('Box_h.png')
plt.show()
表D.1のデータをリストdataに設定して関数boxplotを呼び出している。実行すると図D.1の箱図が描かれる。
図D.1
箱を縦向きで描くときは、関数boxplotの引数にorient = ‘h’を追加して、次のようにする。
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sb
data = [65, 67, 67, 67, 60, 65, 56,
61, 67, 74,
73,
59, 72, 69, 69, 82, 75, 67, 65, 69]
plt.title('箱図(横向き)', fontsize=20)
sb.boxplot(data, orient = 'h')
plt.show()
実行すると、図D.2のように横向きで描かれる。
図D.2
表D.1のデータに加えて、次の表D.2のデータも一緒に箱図を描くとする。
表D.2 グループBのデータ |
84 84 75 67 81 90 75 79 77 72 73 70 80 88 79 84 76 76 76 90 |
このときのスクリプトは以下のようになる。
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sb
data1 = [65, 67, 67, 67, 60, 65, 56,
61, 67, 74,
73,
59, 72, 69, 69, 82, 75, 67, 65, 69]
data2 = [84, 84, 75, 67, 81, 90, 75,
79, 77, 72,
73, 70, 80, 88, 79, 84, 76, 76, 76, 90]
Data = pd.DataFrame({'A':data1,
'B':data2})
plt.title('箱図(縦)', fontsize=20)
sb.boxplot(data=Data)
plt.xticks(fontsize=16)
plt.xlabel('Group', fontsize=16)
plt.ylabel('Value', fontsize=16)
plt.tight_layout()
plt.savefig('Box_v.png')
plt.show()
それぞれのグループのデータをリストdata1とリストdata2に設定し、data1のキーを’A’、data2のキーを‘B’としてデータフレームを構成してDataで表している。
上のスクリプトを実行すると図D.3の箱図が表示される。
図D.3
箱を横向きで描くときは、以下のようにする。
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sb
data1 = [65, 67, 67, 67, 60, 65, 56,
61, 67, 74,
73, 59, 72, 69, 69, 82, 75,
67, 65, 69]
data2 = [84, 84, 75, 67, 81, 90, 75,
79, 77, 72,
73, 70, 80, 88, 79, 84, 76, 76, 76, 90]
Data = pd.DataFrame({'A':data1,
'B':data2})
plt.title('箱図(横)', fontsize=20)
sb.boxplot(data=Data, orient='h')
plt.xticks(fontsize=12)
plt.yticks(fontsize=20)
plt.xlabel('Value', fontsize=16)
plt.ylabel('Group', fontsize=16)
plt.tight_layout()
plt.savefig('Box_h.png')
plt.show()
方向を
orient = 'h'
と明示する。このとき、横向きの図D.4の箱図が描かれる。
図D.4
表E.1のデータのヴァイオリン図を描く。
表E.1 グループAのデータ |
65 67 67 67 60 65 56 61 67 74 73 59 72 69 69 82 75 67 65 69 |
ヴァイオリン図を描くスクリプトは以下のようになる。
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sb
data = [65, 67, 67, 67, 60, 65, 56,
61, 67, 74,
73,
59, 72, 69, 69, 82, 75, 67, 65, 69]
plt.title('ヴァイオリン図(縦)', fontsize=20)
sb.violinplot(data)
plt.savefig('Violin1_v.png')
plt.show()
表E.1のデータをリストdataに設定して関数violinplotを呼び出している。実行すると図E.1のヴァイオリン図が描かれる。
図E.1
ヴァイオリンを横向きで描くときは、関数boxplotの引数にorient = ‘h’を追加して、次のようにする。
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sb
data = [65, 67, 67, 67, 60, 65, 56,
61, 67, 74,
73,
59, 72, 69, 69, 82, 75, 67, 65, 69]
plt.title('ヴァイオリン図(横)', fontsize=20)
sb.violinplot(data, orient='h')
plt.savefig('Violin1_h.png')
plt.show()
実行すると、図E.2のように縦向きで描かれる。
図E.2
細片図を重ねるスクリプトは、次のようになる。
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sb
data = [65, 67, 67, 67, 60, 65, 56,
61, 67, 74,
73,
59, 72, 69, 69, 82, 75, 67, 65, 69]
plt.title('ヴァイオリン図と細片図', fontsize=20)
sb.violinplot(data, alpha=0.5,
edgecolor='k', linewidth=2)
sb.stripplot(data, color = 'm')
plt.show()
2つの関数violinplotとstripplotを実行すればよい。このとき、図E.3のようなグラフになる。
図E.3
表E.1のデータに加えて、次の表E.2のデータも一緒にヴァイオリン図と細片図を描くとする。
表E.2 グループBのデータ |
84 84 75 67 81 90 75 79 77 72 73 70 80 88 79 84 76 76 76 90 |
このときのスクリプトは以下のようになる。
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sb
data1 = [65, 67, 67, 67, 60, 65, 56,
61, 67, 74,
73,
59, 72, 69, 69, 82, 75, 67, 65, 69]
data2 = [84, 84, 75, 67, 81, 90, 75,
79, 77, 72,
73, 70, 80, 88, 79, 84, 76, 76, 76, 90]
Data = pd.DataFrame({'A':data1,
'B':data2})
plt.title('ヴァイオリン図と細片図', fontsize=20)
sb.violinplot(data=Data, fill=False,
linewidth=2)
sb.stripplot(data=Data)
plt.xticks(fontsize=20)
plt.tight_layout()
plt.show()
それぞれのグループのデータをリストdata1とリストdata2に設定し、data1のキーを’A’、data2のキーを‘B’としてデータフレームを構成してDataで表している。
上のスクリプトを実行すると図E.4のグラフが表示される。
図E.4
ヴァイオリンと細片を横向きで描くときは、以下のようにする。
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sb
data1 = [65, 67, 67, 67, 60, 65, 56,
61, 67, 74,
73,
59, 72, 69, 69, 82, 75, 67, 65, 69]
data2 = [84, 84, 75, 67, 81, 90, 75,
79, 77, 72,
73, 70, 80, 88, 79, 84, 76, 76, 76, 90]
Data = pd.DataFrame({'A':data1,
'B':data2})
plt.title('ヴァイオリン図と細片図', fontsize=20)
sb.violinplot(data=Data, fill=False,
linewidth=2, orient='h')
sb.stripplot(data=Data, orient='h')
plt.yticks(fontsize=18)
plt.tight_layout()
plt.show()
方向を
orient = 'h'
と明示する。このとき、横向きの図E.5の箱図が描かれる。
図E.5
箱図とヴァイオリン図と細片図を描く例を以下に示す。
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sb
import pandas as pd
data1 = [65, 67, 67, 67, 60, 65, 56,
61, 67, 74,
73,
59, 72, 69, 69, 82, 75, 67, 65, 69]
data2 = [84, 84, 75, 67, 81, 90, 75,
79, 77, 72,
73, 70, 80, 88, 79, 84, 76, 76, 76, 90]
Data = pd.DataFrame({'A':data1,
'B':data2})
plt.title('箱図とヴァイオリン図と細片図', fontsize=20)
sb.violinplot(data=Data, orient = 'h',
alpha=0.3)
sb.stripplot(data=Data, orient = 'h',
color='none', edgecolor='r', linewidth=2)
sb.boxplot(data=Data, orient = 'h',
showfliers=False, fill=False, color='g', linewidth=2)
plt.yticks(fontsize=20)
plt.tight_layout()
plt.savefig('ViolinStripBox.png')
plt.show()
上のスクリプトを実行すると、図E.6のグラフが表示される。
図E.6
国語と英語の得点が表F.1のようであったとする。
表F.1 2教科[国語、英語]のスコア(仮想データ) |
[79, 72]
[77, 70] [74,
75] [53, 44] [76, 52] [68, 60]
[96, 96] [85,
71] [74, 49] [93, 80] [54, 55]
[86, 70] [89,
96] [87, 87] [81, 81] [84, 85]
[78, 64] [76,
53] [54, 57] [75, 60] |
この散布図を描くためのスクリプトを以下のように用意した。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
data = [
[79,
72], [77, 70], [74, 75], [53, 44], [76, 52],
[68,
60], [96, 96], [85, 71], [74, 49], [93, 80],
[54,
55], [86, 70], [89, 96], [87, 87], [81, 81],
[84,
85], [78, 64], [76, 53], [54, 57], [75, 60]
]
data = np.array(data)
plt.title('散布図', fontsize = 20)
plt.scatter(data.T[0], data.T[1])
plt.xlabel('国語', fontsize = 16)
plt.ylabel('英語', fontsize = 16)
plt.show()
次のコード
data = np.array(data)
により、リストdataをndarray型np.array(data)に変換してdataと置いている。
上のスクリプトを実行すると、散布図が図F.1のように描かれる。
図F.1
図F.2のファイルは、気象庁のウエブサイトに公開されているデータから、2024年7月の東京都の日ごとの最高気温と最低気温のデータを読み取りExcelファイル気象庁最高最低気温.xlsxとしたものである。
図F.2
図F.2のファイル気象庁最高最低気温.xlsxを読み込み、最高気温を最低気温の散布図とヒストグラムを描くスクリプトをリストF.1のように書いてみた。
リストF1のスクリプトを実行すると、図F3のグラフが表示される。
図F3
描画画面が次のスクリプトにより3つの描画画面に分割されている。
# 描画画面の大きさ
fig = plt.figure(figsize=(7,7))
# 左下の区画: 散布図用
ax1 = plt.subplot2grid((4,4), (1,0),
rowspan=3,colspan=3)
# 左上の区画: 最低気温のヒストグラム用
ax2 = plt.subplot2grid((4,4), (0,0),
rowspan=1, colspan=3, sharex=ax1)
# 右下の区画: 最高気温のヒストグラム用
ax3 = plt.subplot2grid((4,4), (1,3),
rowspan=3, colspan=1, sharey=ax1)
subplot2gridの最初の引数(4,4)は、画面を4行4列に分割することを表し、次の引数(1,0)は分割画面の1行目0列目を小画面の左上の位置とすることを表している。rowspan=3は、分割画面の3行分を、colspan=3は3列分を表し、その広さの分割画面として座標の名前ax1で表している。sharex=ax1は、ax2がax1とx座標を共有することを、sharey=ax1はax3がax1とy座標を共有することを表している。
グラフのbinsは、値の比較が容易なように共通のものbins=np.arange(22,39,2)が指定されている。これにより、最高気温と最低気温の分布の様子が散布図の左上に少し右に傾いた縦長の分布として表されている。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
dframe = pd.read_excel('気象庁最高最低気温.xlsx')
H = dframe['最高気温'].values
L = dframe['最低気温'].values
# 描画画面の大きさ
fig = plt.figure(figsize=(7,7))
# 左下の区画: 散布図用
ax1 = plt.subplot2grid((4,4), (1,0),
rowspan=3,colspan=3)
# 左上の区画: 最低気温のヒストグラム用
ax2 = plt.subplot2grid((4,4), (0,0),
rowspan=1, colspan=3, sharex=ax1)
# 右下の区画: 最高気温のヒストグラム用
ax3 = plt.subplot2grid((4,4), (1,3),
rowspan=3, colspan=1, sharey=ax1)
for x, y in zip(L, H):
ax1.plot(x, y, 'o', c='k',
markersize=10, fillstyle='none')
ax1.set_xticks(np.arange(22,39,2),np.arange(22,39,2))
ax1.set_yticks(np.arange(22,39,2),np.arange(22,39,2))
ax1.grid(visible=True)
ax1.set_xlabel('最低気温(℃)',
fontsize=14)
ax1.set_ylabel('最高気温(℃)',
fontsize=14)
ax2.hist(L, bins=np.arange(22,39,2),
color='b', alpha=0.5, edgecolor='k',
label='最低気温')
ax2.legend()
ax3.hist(H, bins=np.arange(22,39,2),
color='orange', alpha=0.5,
edgecolor='k', orientation='horizontal', label='最高気温')
ax3.legend()
plt.suptitle('東京都の2024年7月の最低・最高気温', fontsize=18)
plt.tight_layout()
plt.show()
参考文献
岡本安晴「いまさら聞けないPythonでデータ分析」丸善出版