(1時間4,000円の伴走型ビデオチャット指導も受付中!)
Pythonでデータを「見える化」する:Matplotlib基礎講座
![]()
【Hiroki】
Yukiさん、こんにちは。最近Pythonの勉強を進めているのですが、計算した結果を数値だけで見るのが少し大変になってきました。データをもっと分かりやすく、グラフや図にする方法はありますか?
![]()
【Yuki】
Hiroki君、こんにちは。そうですね……数字の羅列をずっと見ていると、目が疲れてしまいますよね。Pythonにはデータを視覚化するためのライブラリがいくつかありますが、その中でも最も基本的で、かつ強力なのがMatplotlib(マットプロットリブ)です。これを使えば、簡単な折れ線グラフから複雑な3Dグラフまで、思い通りに描くことができるんですよ。
![]()
【Hiroki】
Matplotlib、聞いたことがあります!でも、設定が細かくて難しいイメージがあるのですが、僕のような初心者でも使いこなせるでしょうか。
![]()
【Yuki】
大丈夫ですよ。最初は少し独特な書き方に戸惑うかもしれませんが、基本の型を覚えてしまえば、あとはパズルのように組み合わせていくだけです。わたしと一緒に、少しずつ「データの可視化」の世界を覗いてみましょうか。
Matplotlibとは何か?
![]()
【Hiroki】
まず、Matplotlibが具体的にどんなものなのか教えてもらえますか?
![]()
【Yuki】
はい。Matplotlibは、Pythonで2次元のグラフを描画するためのライブラリです。科学計算の世界では定番中の定番で、多くのデータサイエンティストやエンジニアが愛用しています。
![]()
【Yuki】
特徴としては、カスタマイズ性が非常に高いことが挙げられます。グラフの色、線の太さ、目盛りの間隔、フォントの細部に至るまで、自分の好みに調整できるんです。Webデザインでもフォント一つで印象がガラリと変わるように、グラフもデザイン次第で伝わりやすさが全く違ってくるんですよ。
![]()
【Hiroki】
なるほど。カスタマイズができるのは楽しそうですね。まずは何から準備すればいいですか?
![]()
【Yuki】
まずはインストールですね。標準的な環境であれば、pipコマンドを使って簡単に導入できます。ターミナルやコマンドプロンプトで以下のコマンドを実行してみてください。
pip install matplotlib
![]()
【Yuki】
これで準備完了です。プログラムの中で使うときは、慣習的にmatplotlib.pyplotをpltという名前でインポートします。これから書くコードの冒頭には、いつもこれを書くと思ってくださいね。
import matplotlib.pyplot as plt
はじめてのグラフ描画
![]()
【Hiroki】
インストールできました。では、実際に何か描いてみたいです!
![]()
【Yuki】
では、一番シンプルな「折れ線グラフ」から始めてみましょうか。まずは、X軸とY軸に対応するデータのリストを用意して、それをplt.plot()に渡すだけです。
import matplotlib.pyplot as plt
# データの準備
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# グラフの作成
plt.plot(x, y)
# グラフの表示
plt.show()
![]()
【Hiroki】
おおっ、これだけでウィンドウが立ち上がって、きれいな斜めの線が表示されました!すごく簡単ですね。
![]()
【Yuki】
ふふ、そうですね。でも、これだけだと「何を表しているグラフか」が分かりません。実用的なグラフにするためには、軸に名前を付けたり、タイトルを添えたりする必要があります。
グラフのデザインを整える(色とスタイル)
![]()
【Hiroki】
確かに、今のままだとただの線ですね。もっと「グラフらしく」するにはどうすればいいんでしょうか。
![]()
【Yuki】
グラフの見た目を整えるのは、Matplotlibの得意分野です。例えば、線の色を変えたり、データポイントにマークを付けたりしてみましょう。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
# 色を赤(red)に、マーカーを丸(o)に、線を点線(--)にしてみます
plt.plot(x, y, color='red', marker='o', linestyle='--')
plt.show()
![]()
【Hiroki】
線の雰囲気が変わりました!colorやlinestyleという引数で指定するんですね。
![]()
【Yuki】
そうです。指定できる色は'blue'や'green'といった基本的な名前のほかに、16進数のカラーコード(#FF5733など)も使えます。わたしは、少し淡い水色なんかを使うと、画面が優しくなって好きですね……。
ラベルとタイトルの追加、そしてフォントへのこだわり
![]()
【Hiroki】
次に、軸の名前やタイトルを入れる方法を教えてください。
![]()
【Yuki】
はい。plt.title()、plt.xlabel()、plt.ylabel()という関数を使います。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1, 8, 27, 64, 125]
plt.plot(x, y)
# タイトルと軸ラベルの設定
plt.title('Sample Data Visualization')
plt.xlabel('Time (s)')
plt.ylabel('Value')
plt.show()
![]()
【Hiroki】
これで一気にグラフらしくなりました!……あ、でもこれ、日本語を使うことはできるんですか?
![]()
【Yuki】
鋭いですね、Hiroki君。実はMatplotlibは、デフォルトのままだと日本語が「文字化け」して、□(豆腐)のようになってしまうんです。これは使用されているデフォルトのフォントが日本語に対応していないからなんですね。
![]()
【Yuki】
わたしはWebサイトのフォントが1ピクセルでもズレていたり、意図しないフォントに置き換わっていたりすると、気になって夜も眠れなくなってしまうタイプなので……ここはしっかり設定しておきたいところです。
![]()
【Hiroki】
それは大変だ……。どうすれば日本語を表示できるんですか?
![]()
【Yuki】
一番簡単なのは、japanize-matplotlibというライブラリをインストールしてインポートする方法です。
pip install japanize-matplotlib
import matplotlib.pyplot as plt
import japanize_matplotlib # これを足すだけです
plt.plot([1, 2, 3], [1, 2, 3])
plt.title('日本語のタイトル')
plt.show()
![]()
【Yuki】
こうすることで、フォントの設定を細かく書かなくても日本語が綺麗に表示されるようになります。視覚的な情報の美しさは、データの信頼性にも繋がると思うので、大切にしたいポイントですね。
様々な種類のグラフに挑戦する
![]()
【Hiroki】
折れ線グラフ以外にも、よく使うグラフはありますか?
![]()
【Yuki】
もちろんです。データの性質によって、最適なグラフの種類は異なります。代表的なものをいくつか紹介しますね。まずは「散布図」です。2つのデータの相関関係を見たいときに使います。
# 散布図
plt.scatter(x, y, color='blue')
![]()
【Yuki】
次に「棒グラフ」です。項目の大きさを比較するのに適しています。
# 棒グラフ
labels = ['A', 'B', 'C']
values = [10, 20, 15]
plt.bar(labels, values)
![]()
【Yuki】
そして「ヒストグラム」ですね。データの分布を確認するのに非常に便利です。
# ヒストグラム
import numpy as np
data = np.random.randn(1000) # ランダムなデータを作成
plt.hist(data, bins=30)
![]()
【Hiroki】
plotをscatterやbarに変えるだけで、色々なグラフが描けるんですね。これなら覚えられそうです。
![]()
【Yuki】
そう言ってもらえると嬉しいです。基本の使い方はどれも似ているので、一つ覚えれば応用が効きますよ。
複数のグラフを並べる(サブプロット)
![]()
【Hiroki】
時々、一つの画像の中にいくつかのグラフが並んでいるのを見かけますが、あれはどうやっているんですか?
![]()
【Yuki】
それは「サブプロット」という機能を使っています。Matplotlibには、「オブジェクト指向インターフェース」という、より高度で整理された書き方があるんです。これを使うと、複数のグラフを制御しやすくなります。
![]()
【Yuki】
少しだけ難しく感じるかもしれませんが、これからの主流になる書き方なので、ぜひ今のうちに触れておきましょう。
import matplotlib.pyplot as plt
# 1行2列のキャンバスを作成
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
# 1つ目のグラフ(左側)
axes[0].plot([1, 2, 3], [1, 4, 9])
axes[0].set_title('Graph 1')
# 2つ目のグラフ(右側)
axes[1].bar(['X', 'Y', 'Z'], [5, 2, 7])
axes[1].set_title('Graph 2')
plt.tight_layout() # レイアウトを自動で調整してくれます
plt.show()
![]()
【Hiroki】
figとaxes……?急に新しい言葉が出てきました。
![]()
【Yuki】
そうですね……例えるなら、fig(Figure)は「画用紙」そのもので、axes(Axes)は、その上に描かれる「一つひとつのグラフ領域」のことだと思ってください。この書き方だと、どの領域に何を描くかを明確に指定できるので、複雑なレイアウトも作りやすくなるんです。
![]()
【Hiroki】
なるほど。画用紙の中に枠をいくつか作るイメージですね。
![]()
【Yuki】
はい、その通りです。最後に追加したplt.tight_layout()は、グラフ同士やラベルが重ならないように自動で隙間を調整してくれる、とても気が利く命令なんですよ。
グラフの保存とまとめ
![]()
【Hiroki】
描いたグラフを画像ファイルとして保存して、レポートやブログに使いたいときはどうすればいいですか?
![]()
【Yuki】
その場合は、plt.show()を呼ぶ前にplt.savefig()を使います。
plt.plot(x, y)
plt.savefig('my_graph.png', dpi=300) # dpiで解像度を指定できます
![]()
【Yuki】
dpiの値を大きくすると、印刷しても耐えられるくらい高精細な画像になります。Webで使うなら、デフォルトか少し高めにするのが良いかもしれませんね。
![]()
【Hiroki】
保存まで完璧にできるようになりました!Matplotlibって、最初は難しそうに見えたけど、一つ一つの命令にちゃんと意味があって面白いですね。
![]()
【Yuki】
そう言ってもらえると、わたしも教えた甲斐がありました……。Matplotlibは奥が深くて、今回紹介したのはほんの入り口に過ぎません。アニメーションを作ったり、3Dでデータをプロットしたりすることもできるんです。
![]()
【Yuki】
でも、まずは今回の基本をしっかり身につけて、自分のデータを可視化してみてください。数字だけでは見えなかった「データの体温」のようなものが、グラフにすることで見えてくるかもしれません。
![]()
【Hiroki】
データの体温……。素敵な表現ですね。僕も色々なデータをグラフにして、何か新しい発見をしてみたいと思います。Yukiさん、ありがとうございました!
![]()
【Yuki】
いえいえ、どういたしまして。もし、また表示がズレたり、デザインで悩んだりしたらいつでも聞いてくださいね。……ふふ、Hiroki君がどんなグラフを作るのか、少し楽しみにしています。
参考リソース - Matplotlib 公式ドキュメント (英文) - japanize-matplotlib GitHubリポジトリ - Matplotlib チュートリアル (User's Guide)
「Matplotlib」のサンプルコードを見る
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

