(1時間4,000円の伴走型ビデオチャット指導も受付中!)
pandasとmatplotlibを組み合わせて、Pythonでデータを美しく可視化する方法を学ぼう
![]()
【Hiroki】
Yukiさん、こんにちは!
最近、Pythonを使ってデータを分析する勉強を始めたんです。pandasを使ってデータを集計するところまでは少しずつ分かってきたのですが、そのデータを綺麗にグラフにする方法がよく分からなくて……。
やっぱり、データを数字の表だけで見るのは少し大変ですよね。
![]()
【Yuki】
Hirokiくん、こんにちは。
そうですね、データの傾向や特徴を掴むためには、グラフにして目に見える形にする「可視化」がとても大切だと思います。
Pythonには、データを扱うのが得意な「pandas」と、グラフを描くのが得意な「matplotlib(マットプロットリブ)」という素晴らしいライブラリがあります。
実は、この2つはとても相性が良くて、組み合わせて使うことで、驚くほど簡単に綺麗なグラフが描けるようになるんですよ。
今日は、その基本的な使い方を一緒に学んでいきましょう。
![]()
【Hiroki】
ありがとうございます!
pandasとmatplotlibを組み合わせるんですね。難しそうですが、僕にもできるでしょうか……?
![]()
【Yuki】
大丈夫ですよ、ゆっくり進めていきましょう。
まずは準備として、必要なライブラリをインストールして、プログラムにインポートするところから始めますね。
ライブラリの準備とインポート
![]()
【Yuki】
もし、まだライブラリをインストールしていない場合は、ターミナルやコマンドプロンプトで以下のコマンドを実行してくださいね。
pip install pandas matplotlib
![]()
【Hiroki】
はい、インストールは無事に終わっていると思います!
Pythonのコードの中では、どのように呼び出せばいいですか?
![]()
【Yuki】
コードの先頭で、以下のようにインポートします。
これはPythonのデータ分析における、とても一般的な「お約束」のような書き方ですね。
import pandas as pd
import matplotlib.pyplot as plt
![]()
【Yuki】
pandasは pd、matplotlibのpyplotモジュールは plt という名前でインポートするのが一般的です。
こうすることで、コードを短くすっきりと書くことができるようになります。
![]()
【Hiroki】
なるほど、pd と plt ですね。これなら覚えるのも簡単そうです。
pandasから直接グラフを描く魔法のメソッド
![]()
【Yuki】
準備ができたら、まずは簡単なデータを作って、グラフを描いてみましょう。
実は、pandasの「DataFrame(データフレーム)」というデータ構造には、直接グラフを描画するための plot() という非常に便利なメソッドが備わっているんです。
裏側ではmatplotlibが動いているのですが、面倒な設定をスキップして、簡単なコードでグラフが描けるようになっているんですよ。
![]()
【Hiroki】
えっ、pandasのデータから直接グラフが作れるんですか?
matplotlibにデータを渡して描くのだと思っていました。
![]()
【Yuki】
そう思いますよね。でも、pandasが間を取り持ってくれているおかげで、とてもシンプルに書けるんです。
実際に、簡単な「1週間の気温データ」を作って折れ線グラフを描いてみましょう。
以下のようなコードを書いてみてください。
import pandas as pd
import matplotlib.pyplot as plt
# 1週間の気温データを作成します
data = {
'曜日': ['月', '火', '水', '木', '金', '土', '日'],
'最高気温': [18, 20, 19, 22, 25, 23, 21]
}
# pandasのDataFrameに変換します
df = pd.DataFrame(data)
# グラフを描画します
df.plot(x='曜日', y='最高気温')
# グラフを表示します
plt.show()
![]()
【Hiroki】
わあ、本当に数行のコードで折れ線グラフが表示されました!
でも、どうして最後に plt.show() が必要なんでしょうか?
![]()
【Yuki】
良い質問ですね、Hirokiくん。
df.plot() は「グラフの形を準備する」という役割を持っています。
そして、その準備されたグラフを画面に「実際に映し出す」役割を持っているのが、matplotlibの plt.show() なんです。
この2つの連携によって、綺麗なグラフが表示される仕組みになっているんですよ。
折れ線グラフをカスタマイズしてみよう
![]()
【Hiroki】
仕組みがよく分かりました!
でも、このグラフ、英語の環境だと日本語が文字化けして四角い「トーフ(□)」になってしまうことがあるって聞いたのですが……。
![]()
【Yuki】
そうなんです、環境によっては日本語がうまく表示されない(いわゆる「豆腐化」)現象が起きることがありますね。
その対策として、今回は一時的に日本語フォントを指定する方法や、あるいは英語表記で分かりやすくする方法がありますが、まずは簡単な「英語のラベル」を使いつつ、matplotlibの機能を使ってタイトルやラベルを追加する方法を学びましょう。
英語の方が、プログラムのコードとしてもすっきりして見えるかもしれません。
![]()
【Hiroki】
なるほど、それなら最初はシンプルな英語のデータで練習してみます!
![]()
【Yuki】
その方が確実かもしれませんね。
では、データを英語にして、さらにグラフに「タイトル」や「グリッド(補助線)」を追加してみましょう。
matplotlibの機能を使うことで、グラフの見た目を自由に整えることができます。
import pandas as pd
import matplotlib.pyplot as plt
# 英語のデータを作成します
data = {
'Day': ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
'Temperature': [18, 20, 19, 22, 25, 23, 21]
}
df = pd.DataFrame(data)
# グラフを描画し、線の色や太さを変更します
df.plot(x='Day', y='Temperature', marker='o', color='skyblue', linewidth=2)
# matplotlibを使ってグラフを装飾します
plt.title('Weekly Temperature Transition') # タイトル
plt.xlabel('Day of the Week') # X軸のラベル
plt.ylabel('Temperature (C)') # Y軸のラベル
plt.grid(True) # グリッド線の表示
# グラフを表示します
plt.show()
![]()
【Hiroki】
すごいです! 線の色が変わって、丸い目印(マーカー)もついて、すごく見やすくなりました。
df.plot() の中に、色(color)や線の太さ(linewidth)を指定するオプションが書けるんですね。
![]()
【Yuki】
はい、その通りです。
marker='o' を指定することで、データのポイントに丸いマークを表示することができます。
さらに、matplotlibの plt.title() や plt.grid(True) を組み合わせることで、データの意味がより伝わりやすいグラフになったと思います。
いろいろな種類のグラフを描く
![]()
【Hiroki】
折れ線グラフはバッチリ分かりました!
でも、データによっては、棒グラフや散布図など、他の種類のグラフを使いたいこともありますよね?
そういうときはどうすればいいんでしょうか?
![]()
【Yuki】
もちろん、簡単に別の種類のグラフを描くことができますよ。
pandasの plot() メソッドには、kind という引数(パラメーター)が用意されていて、ここでグラフの種類を指定することができるんです。
代表的なものをいくつか紹介しますね。
kind='line': 折れ線グラフ(デフォルト)kind='bar': 垂直棒グラフkind='barh': 水平棒グラフkind='scatter': 散布図kind='hist': ヒストグラム
![]()
【Hiroki】
kind を変えるだけで、グラフの種類を切り替えられるんですね!
実際に棒グラフを描いてみたいです。
棒グラフ(Bar Plot)の描き方
![]()
【Yuki】
では、店舗ごとの売上データをイメージして、棒グラフを描いてみましょう。
今度は kind='bar' を指定します。
import pandas as pd
import matplotlib.pyplot as plt
# 店舗ごとの売上データ
sales_data = {
'Store': ['Store A', 'Store B', 'Store C', 'Store D'],
'Sales': [350, 420, 280, 500]
}
df_sales = pd.DataFrame(sales_data)
# 棒グラフを描画します
df_sales.plot(x='Store', y='Sales', kind='bar', color='lightgreen', legend=False)
# グラフの調整
plt.title('Sales by Store')
plt.xlabel('Store Name')
plt.ylabel('Sales (Thousands USD)')
plt.xticks(rotation=0) # X軸の文字が傾かないようにします
plt.show()
![]()
【Hiroki】
おっ、綺麗な緑色の棒グラフができました!
最後の plt.xticks(rotation=0) というのは何ですか?
![]()
【Yuki】
よく気づいてくれました。
pandasで棒グラフを描くと、標準ではX軸のラベル(店舗名など)が90度回転して縦向きになってしまうことが多いんです。
それを防ぐために、rotation=0 を指定して、文字を水平に正しく表示させているんですよ。
こういった細かい調整ができるのも、matplotlibの便利なところですね。
![]()
【Hiroki】
なるほど、細かいところまで気を配ることで、一気に読みやすいグラフになるんですね。勉強になります!
散布図(Scatter Plot)の描き方
![]()
【Yuki】
次は「散布図」に挑戦してみましょう。
散布図は、2つのデータの関係性(相関関係)を見るときにとても便利なグラフです。
例えば、「気温」と「アイスクリームの売上」の関係を表すデータを作ってみましょう。
散布図を描くときは、kind='scatter' を指定し、X軸とY軸にするカラム(列)の名前をそれぞれ指定します。
import pandas as pd
import matplotlib.pyplot as plt
# 気温と売上のデータ
ice_cream_data = {
'Temperature': [22, 25, 28, 32, 35, 30, 26, 23],
'Ice_Cream_Sales': [150, 200, 280, 410, 500, 350, 220, 180]
}
df_ice = pd.DataFrame(ice_cream_data)
# 散布図を描画します
df_ice.plot(x='Temperature', y='Ice_Cream_Sales', kind='scatter', color='orange', s=50)
# グラフの調整
plt.title('Temperature vs Ice Cream Sales')
plt.xlabel('Temperature (C)')
plt.ylabel('Sales (Units)')
plt.grid(True)
plt.show()
![]()
【Hiroki】
グラフがドットで表示されました!
気温が上がると、アイスクリームの売上も右肩上がりに増えているのがよく分かります。
コードの中にある s=50 っていう引数は何ですか?
![]()
【Yuki】
それは、散布図の「点(ドット)の大きさ(size)」を指定する引数です。
数字を大きくすると点が大きくなり、小さくすると点も小さくなります。
データの数に合わせて調整すると、見栄えが良くなると思いますよ。
![]()
【Hiroki】
なるほど、点の設定まで変えられるんですね。
色々な引数があって面白いです!
複数のグラフを並べて表示してみよう
![]()
【Hiroki】
Yukiさん、もう1つ質問してもいいですか?
時々、1つの画面に2つ以上のグラフが並んでいるのを見かけるんですが、あれはどうやって作るんでしょうか?
別々のグラフを同時に比較したいときに便利そうだなと思って。
![]()
【Yuki】
確かに、複数のグラフを並べて比較できると、データ分析の説得力がぐっと増しますよね。
それを実現するには、matplotlibの plt.subplots() という機能を使います。
これは、グラフを描くための「キャンバス(Figure)」と、その中に配置する「個別のグラフの領域(Axes)」をあらかじめ作成する手法です。
![]()
【Hiroki】
キャンバスと領域……ですか? 少し難しそうな言葉が出てきましたね。
![]()
【Yuki】
そうですね、少し抽象的に聞こえるかもしれません。
例えるなら、大きな1枚の画用紙が「Figure(フィギュア)」で、その画用紙を2つに区切ったそれぞれのスペースが「Axes(アキシズ)」です。
pandasでグラフを描くときに、この「どのスペースに描くか」を指定してあげることで、並べて表示することができるんですよ。
実際に、1行に2つのグラフ(先ほどの「売上棒グラフ」と「アイスクリーム散布図」)を左右に並べてみましょう。
import pandas as pd
import matplotlib.pyplot as plt
# データを用意します
sales_data = {'Store': ['Store A', 'Store B', 'Store C', 'Store D'], 'Sales': [350, 420, 280, 500]}
ice_cream_data = {'Temperature': [22, 25, 28, 32, 35, 30, 26, 23], 'Ice_Cream_Sales': [150, 200, 280, 410, 500, 350, 220, 180]}
df_sales = pd.DataFrame(sales_data)
df_ice = pd.DataFrame(ice_cream_data)
# 1行2列のグラフ領域を作成します(全体のサイズも指定します)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))
# 1つ目のグラフ(左側)を描画します。 ax=axes[0] で描画先を指定します
df_sales.plot(x='Store', y='Sales', kind='bar', color='lightgreen', ax=axes[0], legend=False)
axes[0].set_title('Sales by Store')
axes[0].set_xlabel('Store')
axes[0].set_ylabel('Sales')
# 2つ目のグラフ(右側)を描画します。 ax=axes[1] で描画先を指定します
df_ice.plot(x='Temperature', y='Ice_Cream_Sales', kind='scatter', color='orange', s=50, ax=axes[1])
axes[1].set_title('Temperature vs Ice Cream Sales')
axes[1].set_xlabel('Temperature (C)')
axes[1].set_ylabel('Sales')
axes[1].grid(True)
# グラフ同士が重ならないように自動で調整します
plt.tight_layout()
plt.show()
![]()
【Hiroki】
おおお! 左右に綺麗にグラフが並びました!
コードを見ると、df_sales.plot(...) の中に ax=axes[0] と書いてありますね。
これで「左側のスペースに描いてね」と指示しているわけですか。
![]()
【Yuki】
その通りです! よく理解できましたね、Hirokiくん。
axes[0] が左側のスペース、axes[1] が右側のスペースを指しています。
また、複数のグラフを並べるときは、タイトルや軸ラベルの指定方法が少しだけ変わって、axes[0].set_title() のように set_ が頭につく形になるのがポイントです。
![]()
【Hiroki】
あ、本当ですね。plt.title() ではなくて、axes[0].set_title() になっています。
こういうルールの違いも気をつけないとですね。
![]()
【Yuki】
はい。少し混乱するかもしれませんが、基本的には「どのスペースに指示を出しているか」を明確にするためだと考えると、自然に受け入れられるようになると思いますよ。
また、最後に書いた plt.tight_layout() は、タイトルやラベルが隣のグラフと重なってしまうのを防いでくれる、魔法のおまじないのようなものです。並べて描くときはいつも入れておくと安心ですね。
さらなる可視化のステップに向けて
![]()
【Hiroki】
pandasとmatplotlibの組み合わせ、思ったよりも直感的で使いやすいです!
これなら僕が今持っているテストの点数データや、家計簿のデータなんかも、簡単にグラフにできそうです。
![]()
【Yuki】
そう言ってもらえると、わたしもとても嬉しいです。
まずは身近なデータを可視化してみるのが、一番の練習になりますよ。
さらに高度なカスタマイズをしたい場合や、公式のより詳細な情報を見たいときは、以下のドキュメントを参考にしてみるのもおすすめです。
世界の開発者の方々が作ってくれた、たくさんのサンプルコードが載っていますよ。
![]()
【Hiroki】
公式ドキュメントですね! ありがとうございます。
英語のサイトですが、コードの例を眺めるだけでもどんなことができるのか分かってワクワクします。
さっそく、自分でデータを作って色々なグラフを描いてみます!
![]()
【Yuki】
素晴らしい意気込みですね、Hirokiくん。
データの可視化は、正解が1つだけではないクリエイティブな作業でもあります。
どうすれば見る人に伝わりやすいか、試行錯誤しながら楽しんでみてくださいね。
もしまた分からないことがあれば、いつでも聞いてください。
![]()
【Hiroki】
はい! Yukiさん、今日は丁寧に教えていただき本当にありがとうございました!
![]()
【Yuki】
どういたしまして。これからも応援していますね。
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

