この記事を読む前に
- 本記事は筆者個人の学習記録であり、所属する大学や特定の団体の公式見解ではありません。
- 記事の内容には十分注意を払っていますが、正確性や完全性を保証するものではありません。
- 本記事を参考にする場合は、必ずご自身でも最新の公式情報等をご確認ください。
- 本記事の利用によって生じたいかなる損害についても、筆者は責任を負いかねます。
この記事でできるようになること
- matplotlibとは何かを理解できる
- Pythonで基本的なグラフを作成できる
- 折れ線グラフを作成できる
- 棒グラフを作成できる
- 散布図を作成できる
- グラフのタイトルや軸ラベルを設定できる
- 凡例やグリッドを追加できる
- pandasのDataFrameからグラフを作成できる
- 土木分野のデータを可視化するための基礎を身につける
今回のサンプルコードはGitHubにも公開しています。
また、以下のGoogle Colabのリンクから直接動かすこともできます。
0. はじめに
前回は、Pythonで表形式のデータを扱うためのライブラリである pandas について学びました。
前回の記事はこちら
前回は、
- DataFrame
- Series
- 条件によるデータ抽出
- CSVファイルの読み込み
- 基本的な統計処理
groupby()
などについて学びました。
しかし、データを表として確認するだけでは、データの特徴を直感的に把握することが難しい場合があります。
例えば、1週間の河川水位データが、
| 日 | 水位(m) |
|---|---|
| 月 | 1.2 |
| 火 | 1.5 |
| 水 | 1.4 |
| 木 | 2.1 |
| 金 | 2.8 |
| 土 | 2.2 |
| 日 | 1.7 |
のようになっていたとします。
表を見れば数値を確認できますが、
「いつ水位が上昇したのか」
「どの程度変化したのか」
といった特徴を直感的に把握するには、グラフにした方が分かりやすいでしょう。
そこで今回は、Pythonでグラフを作成するための代表的なライブラリである matplotlib を学びます。
土木分野では、
- 雨量
- 河川水位
- 流量
- 交通量
- 地盤沈下量
- 構造物の変位
- 実験結果
など、時間や条件によって変化するデータを扱うことが多くあります。
これらをグラフにすることで、数値だけでは分かりにくいデータの特徴を視覚的に確認できます。
今回は、前回学んだpandasとmatplotlibを組み合わせて、
「データを読み込む → 整理する → グラフにする」
という流れを学んでいきます。
1. matplotlibとは
matplotlibは、Pythonでグラフや図を作成するための代表的なライブラリです。
例えば、
- 折れ線グラフ
- 棒グラフ
- 散布図
- ヒストグラム
など、さまざまな種類のグラフを作成できます。
土木分野では、例えば次のような用途が考えられます。
河川・防災
- 河川水位の時間変化
- 雨量の時間変化
- 流量の変化
- 観測データの比較
道路・交通
- 時間帯ごとの交通量
- 地点ごとの交通量比較
- 曜日ごとの交通量
地盤・施工
- 地盤沈下量の変化
- 施工時の計測値
- 地盤調査結果
構造・実験
- 荷重と変位の関係
- 応力とひずみの関係
- 実験結果の比較
このように、matplotlibは土木分野のデータを「見る」ための基本的な道具として利用できます。
2. matplotlibのインストール
Google Colabを利用する場合、matplotlibは基本的に利用できる状態になっています。
uv環境の場合は以下を実行します。
uv add matplotlib
matplotlibをインポートするには、
import matplotlib.pyplot as plt
とします。
ここで、
import matplotlib.pyplot as plt
のpyplotをpltという名前で利用しています。
そのため、今後は、
plt.plot()
や
plt.show()
のようにpltを使ってグラフを作成します。
日本語フォントの設定
matplotlib はデフォルトでは日本語フォントが埋め込まれていないため、日本語のタイトルや軸ラベルをそのまま使うと文字化けや四角表示(tofu)になることがあります。
かつては japanize-matplotlib が定番でしたが、メンテナンスが停止し Python 3.12 以降の環境で不具合が発生するため、現在は後継の matplotlib-fontja などを利用するか、フォントを直接指定する方法が推奨されます。
方法1: matplotlib-fontja を使う(推奨)
japanize-matplotlib の後継(フォーク)として開発されたライブラリです。最新の Python 環境にも対応しており、インポートするだけで自動的に日本語フォントが適用されます。
uv環境の場合は以下を実行します。
uv add matplotlib-fontja
コードの先頭でインポートします。
import matplotlib.pyplot as plt
import matplotlib_fontja
方法2: フォントを直接指定する(標準機能)
外部ライブラリを追加しない場合は、plt.rcParams でOSや環境に入っている日本語フォントを直接指定します。
import matplotlib.pyplot as plt
# システムにある日本語フォントを指定
plt.rcParams['font.family'] = 'IPAexGothic'
※補足: Google Colab 等のクラウド環境で直接フォントを指定する場合は、あらかじめ apt-get 等で Linux システム側にフォント(fonts-ipafont-gothic など)をインストールしておく必要があります。初心者の方や環境依存を避けたい場合は、方法1の matplotlib-fontja を使うのが最も簡単でおすすめです。
3. 折れ線グラフを作ってみる
まずは、最も基本的なグラフの一つである折れ線グラフを作ってみます。
例えば、1週間の河川水位を考えてみます。
import matplotlib.pyplot as plt
days = ["月", "火", "水", "木", "金", "土", "日"]
water_level = [1.2, 1.5, 1.4, 2.1, 2.8, 2.2, 1.7]
plt.plot(days, water_level)
plt.show()
plt.plot()を使うと、折れ線グラフを作成できます。
plt.show()は作成したグラフを表示するための命令です。
今回の場合、
- 横軸 → 曜日
- 縦軸 → 河川水位
となっています。
グラフにすることで、水位が金曜日に大きく上昇し、その後低下していることが視覚的に分かります。
4. グラフにタイトルを付ける
グラフには、何を表しているのか分かるようにタイトルを付けるとよいでしょう。
plt.plot(days, water_level)
plt.title("河川水位の変化")
plt.show()
plt.title()を使うことで、グラフにタイトルを付けることができます。

5. 軸ラベルを付ける
グラフでは、横軸と縦軸が何を表しているのかを明確にすることも重要です。
plt.plot(days, water_level)
plt.title("河川水位の変化")
plt.xlabel("曜日")
plt.ylabel("水位 (m)")
plt.show()
それぞれ、
plt.xlabel()
が横軸のラベル、
plt.ylabel()
が縦軸のラベルです。
グラフを他の人に見せる場合は、
「この軸は何を表しているのか」
が分かるようにしておくことが重要です。
特に土木工学では、単位が重要になります。
例えば、
水位 (m)
流量 (m³/s)
交通量 (台/h)
変位 (mm)
応力 (MPa)
のように、必要に応じて単位を明記しましょう。
6. グリッドを表示する
グラフに目盛線を追加すると、値を読み取りやすくなります。
plt.plot(days, water_level)
plt.title("河川水位の変化")
plt.xlabel("曜日")
plt.ylabel("水位 (m)")
plt.grid()
plt.show()
plt.grid()を使うことで、グリッドを表示できます。
特に、
「どの程度の値なのか」
をグラフから読み取りたい場合には便利です。
7. 凡例を表示する
複数のデータを1つのグラフに表示するときには、どの線が何を表しているのかを示す必要があります。
例えば、河川の水位と基準水位を同時に表示してみます。
days = ["月", "火", "水", "木", "金", "土", "日"]
water_level = [1.2, 1.5, 1.4, 2.1, 2.8, 2.2, 1.7]
standard_level = [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0]
plt.plot(days, water_level, label="観測水位")
plt.plot(days, standard_level, label="基準水位")
plt.title("河川水位と基準水位")
plt.xlabel("曜日")
plt.ylabel("水位 (m)")
plt.legend()
plt.grid()
plt.show()
label=でデータの名前を指定し、
plt.legend()
で凡例を表示します。
このように、複数のデータを比較するときには凡例が重要になります。
8. 棒グラフを作ってみる
次に、棒グラフを作ってみます。
例えば、地点ごとの交通量を比較してみます。
import matplotlib.pyplot as plt
locations = ["A地点", "B地点", "C地点", "D地点"]
traffic = [1200, 1800, 1500, 900]
plt.bar(locations, traffic)
plt.title("地点別交通量")
plt.xlabel("地点")
plt.ylabel("交通量 (台/日)")
plt.show()
棒グラフは、
複数の項目の大きさを比較する
ときに向いています。
今回の場合、
- A地点
- B地点
- C地点
- D地点
の交通量を比較しています。
折れ線グラフは「変化」を見るのに向いているのに対して、棒グラフは「項目間の大きさを比較する」のに向いています。
9. 散布図を作ってみる
次に散布図を作ってみます。
散布図は、2つの数値データの関係を見るときによく使われます。
例えば、雨量と河川水位の関係を考えてみます。
import matplotlib.pyplot as plt
rainfall = [5, 10, 15, 20, 25, 30, 40]
water_level = [1.1, 1.2, 1.3, 1.5, 1.7, 2.0, 2.5]
plt.scatter(rainfall, water_level)
plt.title("雨量と河川水位の関係")
plt.xlabel("雨量 (mm)")
plt.ylabel("水位 (m)")
plt.grid()
plt.show()
散布図はplt.scatter()を使って作成します。
このようなグラフを作ることで、
「雨量が増えると水位も上昇する傾向があるか」
といったデータの関係を視覚的に確認できます。
ただし、グラフから相関関係が見られたとしても、
「一方が増えたから必ずもう一方が増える」
と因果関係まで判断できるわけではありません。
実際の土木データを分析するときには、統計的な検討や工学的な考察も必要になります。
10. pandasとmatplotlibを組み合わせる
ここまで、Pythonのリストを使ってグラフを作成しました。
しかし、実際のデータ分析では、前回学んだpandasのDataFrameを使うことが多くあります。
そこで、pandasとmatplotlibを組み合わせてみましょう。
まず、河川水位のデータをDataFrameとして作成します。
import pandas as pd
import matplotlib.pyplot as plt
river_data = pd.DataFrame(
{
"曜日": ["月", "火", "水", "木", "金", "土", "日"],
"水位(m)": [1.2, 1.5, 1.4, 2.1, 2.8, 2.2, 1.7]
}
)
print(river_data)
出力
曜日 水位(m)
0 月 1.2
1 火 1.5
2 水 1.4
3 木 2.1
4 金 2.8
5 土 2.2
6 日 1.7
このDataFrameを使ってグラフを作成します。
plt.plot(
river_data["曜日"],
river_data["水位(m)"]
)
plt.title("河川水位の変化")
plt.xlabel("曜日")
plt.ylabel("水位 (m)")
plt.grid()
plt.show()
このように、
river_data["曜日"]
を横軸に、
river_data["水位(m)"]
を縦軸に指定できます。
前回学んだpandasと、今回学ぶmatplotlibを組み合わせることで、
表データを整理して、そのままグラフにする
という流れを作ることができます。
11. CSVファイルから読み込んでグラフを作る
実際のデータ分析では、Pythonコードの中に直接データを書くのではなく、CSVファイルなどからデータを読み込むことが多くあります。
例えば、
日,雨量(mm)
1,5
2,12
3,8
4,25
5,40
6,18
7,10
というCSVファイルがあるとします。
これをpandasで読み込みます。
import pandas as pd
import matplotlib.pyplot as plt
rain_data = pd.read_csv("rainfall.csv")
print(rain_data.head())
読み込んだデータをグラフにします。
plt.plot(
rain_data["日"],
rain_data["雨量(mm)"]
)
plt.title("日別雨量")
plt.xlabel("日")
plt.ylabel("雨量 (mm)")
plt.grid()
plt.show()
このように、
CSVファイル
↓
pandasで読み込む
↓
DataFrameとして整理
↓
matplotlibで可視化
という流れでデータを扱うことができます。
これは土木分野のデータ分析でも基本的な流れになります。
12. グラフを画像として保存する
作成したグラフを画像ファイルとして保存することもできます。
例えば、
plt.plot(
river_data["曜日"],
river_data["水位(m)"]
)
plt.title("河川水位の変化")
plt.xlabel("曜日")
plt.ylabel("水位 (m)")
plt.grid()
plt.savefig("river_water_level.png")
plt.show()
plt.savefig()を使うことで、グラフを画像として保存できます。
例えば、
plt.savefig("river_water_level.png")
とすると、現在の作業ディレクトリに画像が保存されます。
レポートや発表資料にグラフを利用したい場合などに便利です。
13. グラフを作るときに注意すること
グラフは、単に作ればよいというものではありません。
「何を伝えたいのか」を考えて作成することが重要です。
例えば、次のような点に注意します。
① 軸ラベルを付ける
plt.xlabel("時間")
plt.ylabel("水位 (m)")
のように、何を表しているのかを明確にします。
② 単位を明記する
土木工学では単位が非常に重要です。
例えば、
水位 (m)
流量 (m³/s)
雨量 (mm)
交通量 (台/h)
変位 (mm)
など、適切な単位を表示します。
③ タイトルを付ける
グラフだけを見ても、何のデータなのか分かるようにします。
④ 必要に応じて凡例を付ける
複数のデータを表示する場合は、凡例を追加します。
⑤ グラフの種類を目的に合わせて選ぶ
例えば、
- 時間による変化 → 折れ線グラフ
- 項目間の比較 → 棒グラフ
- 2つの数値の関係 → 散布図
というように、目的に応じてグラフを選びます。
また、グラフを作成すること自体が目的ではなく、グラフからデータの特徴を読み取ることも重要です。
雨量と河川水位をグラフ化したとき、単に「雨量が増えると水位が上がった」と結論づけるのではなく、ピークの時間差や観測地点、流域の特性なども考える必要があります。
このように、データを可視化した後は、グラフから何が読み取れるのか、そしてその結果をどのように解釈できるのかを考えることが重要です。
14. AIにグラフを作らせるときも基礎知識が重要
現在では、生成AIに、
「このCSVから雨量のグラフを作って」
と指示するだけでも、matplotlibを使ったコードを生成してもらうことができます。
そのため、
「matplotlibのコードをすべて暗記する必要があるのか?」
と疑問に思うかもしれません。
本シリーズでは、コードをすべて暗記することを目的にはしていません。
むしろ重要なのは、
AIが生成したコードを読んで、その内容が適切か判断できること
です。
例えばAIが、
plt.plot(rainfall, water_level)
というコードを生成したとします。
このとき、
- 横軸は何なのか
- 縦軸は何なのか
- 単位は何なのか
- データの順番は正しいのか
- グラフの種類は適切なのか
- 欠測値はないのか
- このグラフから何が言えるのか
といったことを確認する必要があります。
特に土木分野では、単にPythonコードが実行できればよいわけではありません。
例えば、
水位の単位がmなのかcmなのか
流量の単位がm³/sなのかL/sなのか
交通量が台/hなのか台/日なのか
を間違えるだけでも、結果の意味が大きく変わります。
したがって、生成AIを利用する場合でも、
Pythonの文法やライブラリの基本的な仕組みを理解しておくこと
が重要です。
15. 土木分野での活用例
ここまで学んだmatplotlibは、土木分野のさまざまなデータに利用できます。
河川・防災
例えば、河川水位の時系列データを折れ線グラフにすることで、
- 水位の上昇・下降
- 出水時の水位変化
- 観測期間中の最大水位
- 複数地点の水位変化
などを確認できます。
また、雨量データをグラフ化することで、
- 降雨の時間変化
- 日雨量の比較
- 雨量と水位の関係
などを視覚的に確認できます。
道路・交通
交通量データをグラフ化すると、
- 時間帯による交通量の変化
- 平日と休日の比較
- 地点ごとの交通量
- 交通量のピーク
などを確認できます。
地盤・施工
地盤沈下量や施工時の計測値をグラフ化することで、
- 時間による変化
- 測定値のばらつき
- 施工前後の変化
- 複数地点の比較
などを確認できます。
構造・実験
構造実験などでは、
- 荷重と変位
- 応力とひずみ
- 振動データ
- 実験結果と理論値
などをグラフ化することができます。
このように、matplotlibは単に「きれいなグラフを作るためのライブラリ」ではなく、
データの特徴を把握し、分析や考察につなげるための道具
として利用できます。
16. データ分析の基本的な流れ
今回までに学んだ内容を組み合わせると、Pythonによるデータ分析の基本的な流れが見えてきます。
データを取得
↓
CSVなどから読み込む
↓
pandasで整理する
↓
必要なデータを抽出する
↓
統計量を計算する
↓
matplotlibで可視化する
↓
データの特徴を確認する
↓
土木工学的に考察する
例えば河川観測データなら、
観測データ
↓
CSVファイル
↓
pandas
↓
水位・雨量データの整理
↓
matplotlib
↓
水位・雨量のグラフ
↓
出水時の変化を確認
という流れになります。
この流れは、今後より高度なデータ分析を行う場合にも基本になります。
17. まとめ
今回は、Pythonでグラフを作成するためのライブラリ matplotlib について学びました。
今回扱った内容は、
- matplotlibとは何か
-
plt.plot()による折れ線グラフ -
plt.bar()による棒グラフ -
plt.scatter()による散布図 -
title()によるタイトルの設定 -
xlabel()・ylabel()による軸ラベルの設定 -
grid()によるグリッドの表示 -
legend()による凡例の表示 -
savefig()によるグラフの保存 - pandasとmatplotlibの組み合わせ
- CSVから読み込んだデータの可視化
です。
前回学んだpandasでは、データを
「整理する・抽出する・集計する」
ことを学びました。
今回のmatplotlibでは、そのデータを
「グラフにして見る」
方法を学びました。
この2つを組み合わせることで、
表データ
↓
pandas
↓
データの整理・集計
↓
matplotlib
↓
グラフによる可視化
というデータ分析の基本的な流れを作ることができます。
土木分野では、雨量、水位、流量、交通量、地盤、構造物など、さまざまなデータを扱います。
これらのデータを単に数値として見るだけでなく、グラフとして可視化することで、データの変化や特徴をより直感的に把握できるようになります。
また、生成AIを利用すれば、matplotlibのコードを一から書かなくても、目的に応じたコードを生成してもらうことができます。
しかし、
- グラフの種類は適切か
- 軸は正しいか
- 単位は正しいか
- データの扱い方は適切か
- グラフから何が読み取れるか
- その結果は土木工学的に妥当か
を判断するためには、基本的な知識が必要です。
これからのPython学習では、
「すべてのコードを自分で書く」
ことだけを目標にするのではなく、
「AIやライブラリを活用しながら、生成されたコードと結果を理解・検証できる」
ことも重要になっていくでしょう。
次回は、Pythonで数値計算を行う際によく利用される NumPy について学びます。
NumPyを使うことで、配列や行列などの数値データを効率的に扱うことができます。
土木工学では、構造力学、水理学、測量、数値解析など、さまざまな場面で数値計算を行います。
次回は、こうした計算につながるPythonの数値計算の基礎を学んでいきます。
最後まで読んでいただきありがとうございました。
次の記事はこちら







