つれづれなるブログ

プログラミングに関することが主なブログです。

論文の体裁に合ったグラフを作成する

 この記事は、卒業論文やジャーナル論文を執筆する理系学生向けの記事です。

 

はじめに

 多くの理系学生は、卒業論文を経験すると思います。その時、「グラフの体裁をきちんとするように」と指導教員から言われた人は少なくないはず。

 しかし、いざグラフ作成に取り掛かってみると、意外と時間がかかるものです。本記事では、そのような人たちの手助けになるようなプログラムを共有することを目的としています。

 

グラフの要求事項

 今回は、主に次の要求事項を満たす体裁のグラフを作成していきます。最後に出てくるグラフと見比べてください。

 

以下、要求事項(代表的なもののみ掲載しています)

1. 軸ラベルが存在する

2. 軸目盛りが内向きである

3. データのラベルがある

4. 枠で囲われている

5. 全ての軸に目盛りがついている

 

プログラムの紹介

 ここでは、皆さんにとって比較的なじみの深い Pythonスクリプトをご紹介します↓

 

#モデュールのインポート
import matplotlib.pyplot as plt
import numpy as np


#フォントの設定(数式・文章・サイズ)
plt.rcParams.update({'mathtext.fontset': 'dejavuserif',
                     'font.family': 'serif',
                     'font.size': 30})


#描画領域の設定(figsizeでサイズを変更可能)
fig = plt.figure(figsize = (11, 8))
ax = fig.add_subplot(1, 1, 1)


#データの設定(y=x^2, y=x^3 in [1, 3])
x = np.array([1, 2, 3])
func1 = pow(x, 2)
func2 = pow(x, 3)


#軸ラベルの設定($$で囲んだ部分は数式として斜体で記述可能)
ax.set_xlabel("Coordinate $x$ /mm", fontsize="40")
ax.set_ylabel("Velocity $v$ /(mm/s)", fontsize="40")


#描画区間の設定(x軸とy軸それぞれの始点・終点)
ax.set_xlim(0.5, 3.5)
ax.set_ylim(-1, 31)


#軸目盛りの刻み幅の設定
plt.xticks([0, 1, 2, 3])
plt.yticks([0, 5, 10, 15, 20, 25, 30])


#軸目盛りの内向き化・全枠への目盛りの配置
ax.tick_params(axis='both', which='both', direction='in')
ax.yaxis.set_ticks_position('both')
ax.xaxis.set_ticks_position('both')


#グラフ枠の太さ変更
spines = 5
ax.tick_params(axis = "x", which = "major", length = 10, width = spines)
ax.tick_params(axis = "y", which = "major", length = 10, width = spines)
ax.spines["top"].set_linewidth(spines)
ax.spines["left"].set_linewidth(spines)
ax.spines["bottom"].set_linewidth(spines)
ax.spines["right"].set_linewidth(spines)


#データの描画
ax.plot(x, func1, label = "func1", linestyle = "-", linewidth = 5)
ax.plot(x, func2, label = "func2", linestyle = "--", linewidth = 5)
#凡例の表示
plt.rc('legend', fontsize=40)
ax.legend(loc = "upper left", edgecolor="black").get_frame().set_linewidth(1.5)
#グラフ表示
plt.tight_layout()
plt.show()
#グラフの保存
fig.savefig("function.png")

 

実行結果↓

スクリプト実行結果

 

Tip: 使用フォントを Times New Roman にしたい人へ

 多くの大学では、英数字フォントの標準は Times New Roman と思いますが、なぜか Python (matplotlib) ではしばしばエラーが発生し、このフォントだけうまく使えません。

 以下、私の実行環境※で動いたスクリプトの一部抜粋です。

 

import matplotlib.font_manager as font_manager
plt.rcParams.update({#'mathtext.default': 'default',
                     'mathtext.fontset': 'stix',
                     'font.family': 'Times New Roman',
                     'font.size': 30})
del font_manager.weight_dict['roman']

 

 このような設定を加えると、出力グラフのフォントが Times New Roman になります。ぜひ参考にしてください。

Ubuntu 22.04.4 LTS Python 3.10.12

 

おわりに

 この記事が少しでも役に立ったなら幸いです。疑問点や不明点がある場合は、コメントでお気軽にお願いします。