皆さん、こんにちは!
上越市を拠点にし、「FA設備・装置開発」と「画像処理」に強い会社、NSIです!
私達は豊富な経験と専門知識で、各種業界の自動化・システム化のお手伝いをしています。
1月も残りわずかですね。
今年は大雪ではなかったものの、まだまだ寒い日が続いております。
そんな寒さを吹き飛ばすものといえば… プログラムですよね。(?)
それでは今月ラストの記事も、張り切っていきましょう!
今回はPythonでグラフを作成する方法についてまとめました。
Pythonでグラフを作成したい!という方の参考になれば嬉しいです。
Pythonでグラフを作成できるメリットとは?
日々の業務において、データを集計するにはExcelがよく利用されます。
縦棒や折れ線、円グラフなど、様々な種類のグラフが作成できて便利ですよね。
しかし、Pythonでグラフを作成できることでこんなメリットがあります。
システムに組み込みやすい
例として「ある検査が終わったらデータを集計し、グラフを出力する」というシステムがあったとしましょう。
Excelは人の手による操作が必要なため、グラフの作成は基本的に手作業で行う必要があります。
外部からExcelを操作するライブラリもありますが、その場合、Excelファイルを操作することになります。
よって、Excelがインストールされていないとグラフの閲覧ができないという問題があります。
しかし、PythonであればExcelが不要でグラフが作成可能です。
また、ソースコードをexe化すればPython自体のインストールも不要となります。
※ Pythonのexe化については以下参照。
3Dグラフが作成できる
今回使用する「Matplotlib」というライブラリでは、3Dグラフの作成も可能です。
3Dグラフでは様々な角度でのデータの閲覧が容易に行うことができます。
Matplotlibとは?
「Matplotlib」とは、Pythonで2Dおよび3Dのグラフを描画するためのライブラリです。
よく使うグラフは以下のように作成が可能です。
![](https://nsi-freak.com/wp-content/uploads/2024/01/縦棒グラフ-1-600x450.png)
![](https://nsi-freak.com/wp-content/uploads/2024/01/折れ線グラフ-1-600x450.png)
![](https://nsi-freak.com/wp-content/uploads/2024/01/円グラフ-1-600x450.png)
![](https://nsi-freak.com/wp-content/uploads/2024/01/横棒グラフ-1-600x450.png)
![](https://nsi-freak.com/wp-content/uploads/2024/01/散布図-1-600x450.png)
![](https://nsi-freak.com/wp-content/uploads/2024/01/3Dグラフ散布図-1-600x450.png)
上記は一例で、他にも様々なグラフが作成できます。
詳しくは公式ドキュメントをご覧ください。
https://matplotlib.org/stable/gallery/index.html
Matplotlibでグラフを作成する
早速、グラフを作成してみましょう。
ここからはPythonがインストールされていることを前提に説明していきます。
1. Matplotlibのインストール
コマンドプロンプトを起動し、以下のコマンドを実行します。
※ 以下はPythonがインストールされている場合のコマンドです。別の開発環境(Anaconda)等を使っている場合は、それに合わせて変更してください。
pip install matplotlib
補足:Anacondaとは?
簡単に言うと、Pythonでの開発に必要な「ライブラリ」や「ツール」などをセットにした実行環境。
Pythonでは、必要なライブラリを「pip install ~」で1つずつインストールする必要があるが、Anacondaはインストール時にある程度のライブラリも含まれているため、わざわざインストールする手間がないのがメリット。
多様な機能が含まれている分、Pythonよりも容量を必要とするのがデメリット。
2. グラフ描画処理を作成する
続いて、グラフを作成する処理を実装していきます。
以下のような処理を作成しました。簡単に解説していきます。
import matplotlib.pyplot as plt
# 日本語フォント指定
plt.rcParams["font.family"] = 'Meiryo'
# データ
categories = ['A', 'B', 'C', 'D']
values = [3, 7, 2, 5]
# 描画
plt.bar(categories, values)
# タイトル,軸ラベル
plt.title('タイトルです')
plt.xlabel('X軸ラベルです')
plt.ylabel('Y軸ラベルです')
# 表示
plt.show()
「日本語フォント指定」では、グラフのフォントを指定しています。
Matplotlibのデフォルト設定では、英語フォントになっているため、日本語を指定した際に文字化けが発生します。
日本語フォントを指定することで、タイトルや軸ラベルで日本語を使用することが可能となります。
「データ」では、グラフに表示するデータを定義しています。
今回の場合、X軸とY軸に対応するデータがそれぞれ必要となります。
そのため、X軸とY軸の要素数は一致している必要があります。
「描画」では、グラフを描画します。
ちなみに、縦棒グラフは「plt.bar()」と指定しますが、横棒グラフの場合は「plt.bath()」と指定することで描画が可能です。
「タイトル,軸ラベル」では、グラフのタイトルと軸ラベルを設定しています。
「表示」では、グラフを別ウィンドウで表示します。
3. 実行してみる
作成した処理を実行すると、ウィンドウが表示されます。
定義したデータを元に、グラフが描画されていることが分かります。
![](https://nsi-freak.com/wp-content/uploads/2024/01/BarGraph-600x512.png)
おまけ. 3Dグラフの描画
せっかくなので、3Dグラフも表示してみましょう。
以下の処理を作成します。先程と変わった部分(★マーク)について解説していきます。
import matplotlib.pyplot as plt
# 日本語フォント指定
plt.rcParams["font.family"] = 'Meiryo'
# データ ★
x = [1, 2, 3, 4, 5]
y = [2, 3, 4, 5, 6]
z = [5, 6, 2, 8, 7]
# Figureと3Dサブプロットの作成 ★
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
# 描画 (3D散布図) ★
ax.scatter(x, y, z)
# タイトル,軸ラベル ★
ax.set_title('タイトルです')
ax.set_xlabel('X軸ラベルです')
ax.set_ylabel('Y軸ラベルです')
ax.set_zlabel('Z軸ラベルです')
# 表示
plt.show()
「データ」では、グラフに表示するデータを定義しています。
3Dグラフの場合、X軸, Y軸, Z軸に対応するデータがそれぞれ必要となります。
「Figureと3Dサブプロットの作成」では、3Dグラフの初期化を行います。
「plt.figure()」が3Dグラフを描画するためのキャンバス、「fig.add_subplot()」がその中に配置されるプロットを定義します。
「描画 (3D散布図)」では、3Dグラフを描画します。
散布図の他にも、折れ線や棒グラフなどの描画が可能です。
「タイトル,軸ラベル」では、グラフのタイトルと軸ラベルを設定しています。
3DグラフはX, Y, Z軸なので、3軸分をそれぞれ指定します。
作成した処理を実行すると…?
先程と同様に、ウィンドウが表示されました。
![](https://nsi-freak.com/wp-content/uploads/2024/01/3DGraph-600x512.png)
3Dグラフの場合、グラフを回転して閲覧することが可能です。
![](https://nsi-freak.com/wp-content/uploads/2024/01/3DGraph.gif)
3Dグラフの活用例
「Matplotlib」で簡単にグラフを作成できることは分かりました。
しかし、棒グラフや円グラフなどは使う場面も多々あると思いますが、3Dグラフとなると、実際どういうことに活用できるのかなかなか思いつかないもの…。
ここからは、前半に紹介したメリットを踏まえて活用例を考えてみましょう。
活用例1. 定期的なデータの集計
前半でも記載した通り「ある検査が終わったらデータを集計し、グラフを出力する」という処理を行う場合です。
処理さえあれば、あとはデータを準備するだけで何回でも集計が可能です。
仮に、人がExcelで繰り返し集計するとなると、ミスが出たり、ものすごい労力がかかったりします…。
活用例2. XYZ座標を持つデータの可視化
例えば「ある立体の中の異物を検査する」というシステムがあったとしましょう。
当然、異物の位置がどこにあるか把握する必要が出てきますが、座標値だけだと分かりにくい…。
そんなときに3Dグラフを使うと、異物がどこにあるかが分かりやすくなります。
![べんぞうくん](https://nsi-freak.com/wp-content/uploads/2023/11/benzou_green_005_3.png)
実はNSIでは過去にそういった処理を行ったことがあるよ。
興味のある人、そんな処理を求めていた人は、ぜひ連絡してね。
最後に
今回は「Matplotlib」というライブラリを使用してグラフを作成してみました。
手軽に様々なグラフが作成できるのは非常に便利ですね。
皆さんも、ぜひお試しください。
ここまで読んでいただき、ありがとうございました。
ご質問・ご要望・ご相談などは、下記お問い合わせフォームからお気軽にご連絡ください。
http://www.net-nsi.co.jp/toiawase.html
![べんぞうくん](https://nsi-freak.com/wp-content/uploads/2023/11/benzou_green_005_3.png)
この記事がいいねと思ったらGoodボタンを押してね。