![見出し画像](https://assets.st-note.com/production/uploads/images/140632754/rectangle_large_type_2_9399f3ef265b91ac876901121c607763.jpeg?width=1200)
謁見レポート用グラフをPythonで描く
電通大一年にある大敵、基礎科学実験A、通称謁見のレポートを書くにあたって、グラフを載せることがあります。
そのグラフは、LMS上で様式の指定があり、その通りに描く必要があります。
グラフというとExcelを最初に思い浮かべると思います。
私も最初は、Excelで簡単に作れるだろうと思っていましたが、実際に作りかけると、どうも思うような設定項目が見つからず、早々に諦めました。
というのも、Pythonのmatplotlibというモジュールでグラフが描けるということを知っていたからです。
実際に作って上手くいったので、備忘録もかねて、記しておきます。
これができると、グラフ作成の手間がだいぶ減ると思います。
生成するグラフは以下のようなものです。
![](https://assets.st-note.com/img/1715698787181-JJj1nm0QAp.png?width=1200)
やること
Pythonインストール
モジュールインストール
CSVファイル生成
pythonコード編集
グラフ保存
Pythonインストール
拡張子表示の設定
超事前準備で、拡張子を表示するように設定しておきます。
エクスプローラを開いて、上の方の「フィルター」の横にある「・・・」、「オプション」をクリックすると、以下の画面が出ると思います。
ここで、「登録されている拡張子は表示しない」のチェックを外しておきます。
![](https://assets.st-note.com/img/1715689462733-f0axG4LZmC.png)
次に、pythonをインストールします。
既にインストールされている方は飛ばしてください。
Pythonダウンロード
Pythonをダウンロードします。
このサイトの「Download」にマウスカーソルを置くと出てくる、「Download for Windows」のPython 3.oo.oをクリックして、ダウンロードしてください。(記事執筆時点では3.12.3)
![](https://assets.st-note.com/img/1715686065122-enhOsdw9Ck.png?width=1200)
ダウンロードできたら、exeファイルを実行してください。
そうすると、以下のような画面が出てくると思います。
【重要】ここで、下にある、「Add python.exe to PATH」にチェックを入れてください。もし入れ忘れたら、再度インストールしてください。
Install Nowを押して、インストールします。
![](https://assets.st-note.com/img/1715686281189-w4wBRML7rT.png?width=1200)
しばらくすると、インストールが終わり、次の画面が出てくると思います。
![](https://assets.st-note.com/img/1715686353909-dN7Pf2Wwcq.png?width=1200)
これは必須ではないですが、「Disable path length limit」を実行しておくことをお勧めします。意味はそのままの通りです。
実行すると、下のような画面になると思います。
「Close」でインストールダイアログを閉じます。
![](https://assets.st-note.com/img/1715686432646-niqErPo5F2.png?width=1200)
Python動作確認
Pythonの動作確認をしておきます。
スタートメニューを右クリックし、「ターミナル」からPowerShellを開きます。
![](https://assets.st-note.com/img/1715686605415-l9PEX4vOCk.png?width=1200)
PowerShellが開いたら、「python」と入力し、Enterキーを押します。
以下のようになれば、インストール成功です。
![](https://assets.st-note.com/img/1715686669404-LLYNuYzGhY.png?width=1200)
ここでは、pythonを実行できます。
試しに、
print('Hello World!')
と入力して実行(Enter)してみましょう。
Hello World! と出力されたはずです。
この時点で、あなたはpythonを書き、実行したことになります。
pythonデビュー、おめでとうございます!
PowerShellの、この状態は、pythonを実行する状態にあります。
exit()
を実行すると、元のPowerShellに戻ります。
モジュールインストール
次に、グラフ生成に必要なモジュールをインストールします。
PowerShellを開き、以下のコマンドを順に一つずつ実行します。
matplotlib
重要なグラフ表示をするために必要なモジュールです。
pip install matplotlib
![](https://assets.st-note.com/img/1715687522347-YGdXzWqYWp.png?width=1200)
実行すると以下のようになると思います。
![](https://assets.st-note.com/img/1715687577748-uwBVItXdHv.png?width=1200)
こうなったら、インストール成功です。
pandas
csvファイルからデータを取ってくるときに使います。
これも同じ要領です。
pip install pandas
![](https://assets.st-note.com/img/1715687655480-5dmVC7gAIo.png?width=1200)
以上でモジュールのインストールが完了しました。
CSVファイル生成
グラフにプロットするためのデータをpythonに渡すのに、csvファイルを使用します。
聞きなれないかもしれませんが、「comma separated values」の略で、コンマで区切られたファイルのことです。
普通のテキストエディタで編集ができます。
作りたいcsvファイルは以下のようなものです。
1,1
2,4
3,9
4,16
5,25
...
一列目にx(横軸)の値、二列目にy(縦軸)の値が入るようにします。
それを、必要なデータ分入力しておきます。
テキストエディタで直打ちし、保存してもいいですが、Excelでデータ管理していると思うので、Excelから出力しようと思います。
![](https://assets.st-note.com/img/1715688553181-VyOkJdLA3D.png)
このようなデータを新規ブックか新規シートで作ります。
この時、A列にx(横軸)の値、B列にy(縦軸)の値を入れるようにします。
また、使いたい値が関数によって生成されているときは、コピーするときに「貼り付けのオプション:」から「値」を選ぶと値がコピーできます。
ここで、新規シートで作った場合は、当該ブックを保存しておきます。
csvファイルを出力するには、「ファイル」、「名前を付けて保存」、「参照」から、ファイル保存ダイアログで、「ファイルの種類」を 「CSV UTF-8(コンマ区切り) (*.csv)」にします。
保存先は適当に設定し、保存してください。
この時、ブックに違うシートが含まれている場合、ダイアログが出て、聞かれると思いますが、該当シートが表示してあれば、その値がcsvに出力されます。
pythonコード編集
事前準備
最初に、pythonの編集エディタを開きます。
適当なフォルダ(先に作ったcsvファイルのあるところが良い)で、新規ファイルを作り、名前を「~.py」にします(~は英字を推奨)。
また、フォルダ名のパス(エクスプローラの上の「~ > ~ > ~」のところをクリックすると見れる)に、日本語や空白が混ざっていると実行できないことがあります。
できるだけ、英字のみにしてください。
特に、onedriveを使っていると日本語が入ってたりします。
生成したpythonファイルを右クリックし、「その他のオプションを確認」、「Edit with IDLE」「Edit with IDLE 3.oo (64-bit)」の順に選択していきます。
※「Edit with IDLE」が表示されない場合は、一度「プログラムから開く」、「Python」を実行すると表示されるかもしれません。
![](https://assets.st-note.com/img/1715689732538-c657txJvdM.png?width=1200)
![](https://assets.st-note.com/img/1715689775847-eaO4CKUfZW.png?width=1200)
そうすると、以下のようなエディタが出てくると思います。
![](https://assets.st-note.com/img/1715689898180-LKLZ9jbWn4.png?width=1200)
ここで、pythonのコードを書きます。
vscodeなどでも、もちろん編集、実行できます。
興味があれば、調べてみてください。
確か、pythonファイルをvscodeで開くとpython拡張機能をインストールみたいなのが出てきて、それをインストールするとできた気がします。
このIDLEに、
print('Hello World!')
と入力し、F5を押すと保存するか?というダイアログが出てきて、OKを押して保存すると、実行されます。
![](https://assets.st-note.com/img/1715690101534-QRdquH9QIx.png?width=1200)
グラフ生成コード編集
さて、事前準備が終わりました。
これから、コードを書いていきます。
大まかなコードはコピペして、少しずつ編集していきます。
ということで、テンプレコードです。
import matplotlib.pyplot as plt
import pandas as pd
#フォント設定
plt.rcParams['font.family'] = 'Times New Roman' # font familyの設定
#plt.rcParams['mathtext.fontset'] = 'stix' # math fontの設定
plt.rcParams["font.size"] = 10 # 全体のフォントサイズが変更されます。
#plt.rcParams['xtick.labelsize'] = 9 # 軸だけ変更されます。
#plt.rcParams['ytick.labelsize'] = 24 # 軸だけ変更されます
#軸設定
plt.rcParams['xtick.direction'] = 'in' #x軸の目盛りの向き
plt.rcParams['ytick.direction'] = 'in' #y軸の目盛りの向き
#plt.rcParams['axes.grid'] = True # グリッドの作成
#plt.rcParams['grid.linestyle']='--' #グリッドの線種
plt.rcParams["xtick.minor.visible"] = True #x軸補助目盛りの追加
plt.rcParams["ytick.minor.visible"] = True #y軸補助目盛りの追加
#plt.rcParams['xtick.top'] = True #x軸の上部目盛り
#plt.rcParams['ytick.right'] = True #y軸の右部目盛り
#軸大きさ
#plt.rcParams["xtick.major.width"] = 1.0 #x軸主目盛り線の線幅
#plt.rcParams["ytick.major.width"] = 1.0 #y軸主目盛り線の線幅
#plt.rcParams["xtick.minor.width"] = 1.0 #x軸補助目盛り線の線幅
#plt.rcParams["ytick.minor.width"] = 1.0 #y軸補助目盛り線の線幅
#plt.rcParams["xtick.major.size"] = 10 #x軸主目盛り線の長さ
#plt.rcParams["ytick.major.size"] = 10 #y軸主目盛り線の長さ
#plt.rcParams["xtick.minor.size"] = 5 #x軸補助目盛り線の長さ
#plt.rcParams["ytick.minor.size"] = 5 #y軸補助目盛り線の長さ
#plt.rcParams["axes.linewidth"] = 1.0 #囲みの太さ
#凡例設定
plt.rcParams["legend.fancybox"] = False # 丸角OFF
plt.rcParams["legend.framealpha"] = 1 # 透明度の指定、0で塗りつぶしなし
plt.rcParams["legend.edgecolor"] = 'black' # edgeの色を変更
plt.rcParams["legend.markerscale"] = 5 #markerサイズの倍率
plt.rcParams['lines.linewidth'] = 0
plt.rcParams['lines.linestyle'] = ''
plt.rcParams['lines.marker'] = '.'
input_csv = pd.read_csv('./input_csv_file.csv', header=None) #********使用するcsvファイルの指定********
first_column_data = input_csv[0]
second_column_data = input_csv[1]
plt.xlim(0, 25) #********x軸の範囲(最小値,最大値)********
plt.ylim(0, 500) #********y軸の範囲(最小値,最大値)********
#plt.figure(dpi=300)
plt.plot(first_column_data, second_column_data, markeredgecolor='k')
plt.xlabel("x") #********x軸ラベルの指定********
plt.ylabel("y") #********y軸ラベルの指定********
#plt.legend()
plt.show()
このコードは、csvファイルの値を、プロットするものです。
これを、IDLEにコピペします。
#********~~~********のところを、主に編集していくことになります。
まずは、csvファイルの指定です。
このテンプレの場合だと、pythonファイルと同じフォルダにある、「input_csv_file.csv」を参照します。
まずはここの「input_csv_file」のところを、先ほど作ったcsvファイルの名前にします。
pythonファイルとcsvファイルは同じフォルダにあると、理解がしやすいと思います。
次に、軸ラベルの設定です。
テンプレでは、x軸ラベルは「x」、y軸ラベルは「y」となっているので、ここを、自分の使いたいように編集していきます。
ここのラベルの書式について、軽く触れておきます。
LaTeXみたいに書きますが、文法は違います。
斜体は、「\mathit{V}」でVの斜体。
平均値バー(?)は、「\overline{V}」でVのバー。
これらは、「$\overline{\mathit{V}}$」のように、$で囲みます。
もちろん上記のように、組み合わせもできます。
例として、以下のような感じで書けます。
plt.ylabel("$\overline{\mathit{I}}$/nA")
グラフ生成&保存
いよいよグラフを表示します。
F5を押して実行しましょう。
そうすると、グラフが表示されると思います。
![](https://assets.st-note.com/img/1715693246807-PrbdqE8Qxi.png?width=1200)
これが、生成したグラフです。
上手くいかなかったら、どこがダメなのか、探ってみましょう。
値がおかしければ、csvを見てみましょう。
そもそもプロットした点が見つからなければ、範囲をもう一度見てみましょう。
表示されたグラフのウィンドウの中央下の辺に、💾のような、フロッピーディスクのアイコンの、保存ボタンがあります。
そこをクリックすると、ファイル選択ダイアログが出てくるので、適当なフォルダに、適当な名前を付けて保存しましょう。
そうすると、pngファイルが保存されます。
![](https://assets.st-note.com/img/1715693275297-B4fbAJ8Ygn.png?width=1200)
あとはこれをLaTeXに埋め込むだけです。
応用1:近似直線、曲線を入れる
近似直線、曲線を入れれます。
一番最初のimportの所を以下のように変えます。(追記:2024/05/14 23:53)
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
凡例設定を以下のように変えます。
#凡例設定
plt.rcParams["legend.fancybox"] = False # 丸角OFF
plt.rcParams["legend.framealpha"] = 1 # 透明度の指定、0で塗りつぶしなし
plt.rcParams["legend.edgecolor"] = 'black' # edgeの色を変更
plt.rcParams["legend.markerscale"] = 5 #markerサイズの倍率
plt.rcParams['lines.linewidth'] = 1
plt.rcParams['lines.linestyle'] = '-'
plt.rcParams['lines.marker'] = '.'
そして、以下のようなコードを追加します。
x = np.arange(0, 50, 0.1)
y = 2 * x - 1
plt.plot(x, y, marker='', color='c')
コード解説
x = np.arange(0, 50, 0.1)
これがxの定義域のようなものです。この例だと、0から50の間を0.1刻みで生成します。
y = 2 * x - 1
入れたい方程式を書きます。
この例だと、y=2x-1の直線を書きます。
plt.plot(x, y, marker='', color='c')
グラフに入れます。
マーカーを消すことで、線だけにしています。
応用2:複数のデータを一つのグラフにする
まず、凡例設定を以下のように変えます。
#凡例設定
plt.rcParams["legend.fancybox"] = False # 丸角OFF
plt.rcParams["legend.framealpha"] = 1 # 透明度の指定、0で塗りつぶしなし
plt.rcParams["legend.edgecolor"] = 'black' # edgeの色を変更
plt.rcParams["legend.markerscale"] = 1 #markerサイズの倍率
そして、以下のようなコードを書きます。
r_input_csv = pd.read_csv('./Red_ave_py.csv', header=None)
r_first_column_data = r_input_csv[0]
r_second_column_data = r_input_csv[1]
o_input_csv = pd.read_csv('./Orange_ave_py.csv', header=None)
o_first_column_data = o_input_csv[0]
o_second_column_data = o_input_csv[1]
y_input_csv = pd.read_csv('./Yellow_ave_py.csv', header=None)
y_first_column_data = y_input_csv[0]
y_second_column_data = y_input_csv[1]
b_input_csv = pd.read_csv('./Blue_ave_py.csv', header=None)
b_first_column_data = b_input_csv[0]
b_second_column_data = b_input_csv[1]
plt.xlim(0, 1.6)
plt.ylim(0, 1200)
plt.scatter(r_first_column_data, r_second_column_data, s=15, marker='o', c='w', ec='k', label='赤色')
plt.scatter(o_first_column_data, o_second_column_data, s=15, marker=',', c='w', ec='k', label='オレンジ色')
plt.scatter(y_first_column_data, y_second_column_data, s=15, marker='^', c='w', ec='k', label='黄色')
plt.scatter(b_first_column_data, b_second_column_data, s=15, marker='v', c='w', ec='k', label='青色')
plt.xlabel("$\it{V}$/V")
plt.ylabel("$\mathregular{\overline{\mathit{I}}}$/nA")
plt.legend(prop={'family':'Yu Gothic'})
input_csv, first_column_data, second_column_dataのひとかたまりを量産する感じです。変数が被ると上書きされてしまうので、r_input_csv, r_first_column_data, r_second_column_dataのように、区別させておきます。
plt.scatterもデータ数分用意します。
marker='o'のところで、','などにすると、プロットの形が変わります。
label='赤色'のようにすると、凡例で表示されます。
plt.legendが、凡例の表示命令です。
The Times Romanだと、日本語出力できないため、フォントも変えています。
おまけ:LaTeXに埋め込み
主題とは外れますが、LaTeXへの埋め込みの仕方も一応載せておきます。
texファイルと同じフォルダにpngファイルを入れておきます。
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{figure.png}
\caption{図の説明}
\end{figure}
この例だと、figure.pngを読み込んでいます。
適宜、ファイル名を変更してください。
\caption で、図の下につく説明を編集します。
「width=12cm」のところは、いろいろ試して、自分が設定したい図の大きさに設定してください。
大きすぎて入らなかったり、小さすぎて見えなかったりする時があります。
また、環境によっては、[H] のところでエラーが出るかもしれないです。
そのときは、LaTeXインストール時に参考にしたサイトに従うのが一番楽です。
最後に
あとは、自分の作りたいようにいじってみてください。
凡例の辺をいじると、グラフの見た目が変わります。
調べたいときは、「matplotlib」を最初につけてググると調べたい情報が出てくると思います。
chatGPTも活用してみてください。
pythonは今回の時みたいに、目的が出てきてからその時に調べて書いてきた素人が、作ってますのでバグがあるかと思います。
無事できたら、一言でもいいので伝えてくれると泣いて喜びます。
エラーもできる限り対応したいと思っています。
プロへ
素人が作ってます。
ここはこうした方が良いとかあったらなんでも言ってください。
参考サイト
この記事が気に入ったらサポートをしてみませんか?