ぷそさんのプログラミング研究所

【卒論】Pythonで論文用の複合グラフを綺麗に作成する

matplotlibでのグラフ作成は簡単ですが,そのまま論文で使う図となると物足りなさを感じます。

この記事では,論文用にグラフを綺麗に作成するための方法についてまとめました。

卒論や修論用に参考にしてみてください!

他のグラフについては以下をご覧ください!

あわせて読みたい
【卒論】Pythonで論文用の折れ線グラフを綺麗に作成する matplotlibでのグラフ作成は簡単ですが,そのまま論文で使う図となると物足りなさを感じます。 この記事では,論文用にグラフを綺麗に作成するための方法についてまとめ...
あわせて読みたい
【卒論】Pythonで論文用の複数折れ線グラフを綺麗に作成する matplotlibでのグラフ作成は簡単ですが,そのまま論文で使う図となると物足りなさを感じます。 この記事では,論文用にグラフを綺麗に作成するための方法についてまとめ...
あわせて読みたい
【卒論】Pythonで論文用の棒グラフを綺麗に作成する matplotlibでのグラフ作成は簡単ですが,そのまま論文で使う図となると物足りなさを感じます。 この記事では,論文用にグラフを綺麗に作成するための方法についてまとめ...
目次

論文用の複合グラフ

こちらの記事では,以下のようなグラフの作成方法がわかります。

Pythonでグラフを作るための準備

Pythonでグラフを作るには以下のモジュールが必要となります。

  • matplotlib
  • numpy(必要であれば)
  • pandas(必要であれば)

matplotlibに関しては必須ですが,pandasnumpyについてはグラフにしたいデータの種類によって決めてもらうと大丈夫です。

作成手順

まず,論文用の図をつくるときに私が気を付けていることは以下の通りです。

  • グラフはモノトーン(白黒)でつくる
  • 文字は大きく
  • 全て英語でつくる
  • 線は太く

モジュールをインポートする

import matplotlib.pyplot as plt
import numpy as np

グラフサイズの設定

まず,グラフのサイズを設定します。

この設定をコピペすると,文書(WordやTex)にそのまま貼っても見やすい大きさになっています。

# 論文用の設定
# centimeters in inches
cm = 1/2.54 

plt.rcParams['font.family'] = 'Helavetica' # font familyの設定
plt.rcParams['mathtext.fontset'] = 'stix' # math fontの設定
plt.rcParams["font.size"] = 12
plt.rcParams['figure.subplot.bottom'] = 0.15
plt.rcParams['figure.subplot.left'] = 0.15
plt.rcParams['axes.axisbelow'] = True

5行目:plt.rcParams['font.family'] =

フォントはなんでも良いですが,論文にはArialHelaveticaがよく使われていると思います。

データの準備

グラフにしたいデータを準備します。

今回は3つのデータにしています。

# データ作成
x = np.array([1, 2, 3, 4, 5])
data1 = [30,50,90,40,70];
data2 = [50,70,50,30,80];
label = ["2018","2019","2020","2021","2022"]

5行目:label =

x軸の目盛りのラベルを設定しています。

単純に数値の場合には必要ありません。

グラフの作成

準備ができたので,プロットしてみましょう!

# グラフの定義
fig = plt.figure(figsize=(12*cm, 8*cm),dpi=300)
ax_left = fig.add_subplot(1,1,1)
ax_right = ax_left.twinx()

# グラフのプロット
# 左軸(折れ線)
P = ax_left.plot(x, 
                 data1, 
                 label=label, 
                 color="#000000",
                 marker="^",
                 markerfacecolor='#ffffff',
                 markeredgecolor="#000000",
                 markersize = 6)

# 右軸(棒グラフ)
B = ax_left.bar(x, 
                 data2, 
                 tick_label=label, 
                 align="center",
                 color="#858584")

# 凡例の設定
plt.legend((P[0], B[0]), ("plot", "bar"), 
            loc='lower center', 
            bbox_to_anchor=(.5, 1.1), 
            ncol=3,
            fancybox=False,
            edgecolor="k")

# 軸周りの設定
ax_left.set_ylim(0, 100)
ax_left.set_xlabel("Time")
ax_left.set_ylabel("Volume1 [XX]")

ax_right.set_ylim(0, 100)
ax_right.set_xlabel("Time")
ax_right.set_ylabel("Volume2 [XX]")

ax_left.grid(axis='y',linestyle='-', color='#e0e0e0')
fig.savefig("complex.png", format="png", dpi=300, bbox_inches='tight')
fig.show()

2行目:fig =

グラフを定義しています。

グラフのサイズは12cm×8cmにしていますが,お好きなサイズにして大丈夫です。

3行目・4行目

軸の設定をしています。

2軸の場合には,1つ目の軸ax_leftに,2つ目の軸ax_rightを追加するイメージです。

8行目:P =

左軸の折れ線グラフをプロットしています。

詳しい設定方法につきましては以下の記事をご覧ください。

あわせて読みたい
【卒論】Pythonで論文用の複数折れ線グラフを綺麗に作成する matplotlibでのグラフ作成は簡単ですが,そのまま論文で使う図となると物足りなさを感じます。 この記事では,論文用にグラフを綺麗に作成するための方法についてまとめ...

18行目:B =

右軸の棒グラフを設定しています。

こちらも詳しい設定方法につきましては以下の記事をご覧ください。

あわせて読みたい
【卒論】Pythonで論文用の積み上げ棒グラフを綺麗に作成する matplotlibでのグラフ作成は簡単ですが,そのまま論文で使う図となると物足りなさを感じます。 この記事では,論文用にグラフを綺麗に作成するための方法についてまとめ...

25行目:plt.legend

凡例の設定をしています。

場所は何も設定しなければ自動でいい感じに設定されますが,干渉する場合もあるので枠外上部に設定しています。

33行目・37行目

左のy軸の範囲右のy軸の範囲を設定します。

34行目・35行目・38行目・39行目

x軸とy軸のラベルを設定しています。

41行目:ax.gird

グリッド線の表示を設定しています。

要らない場合は何も書かず,横線だけ必要な場合にはax.grid(axis='y',linestyle=...),縦線も必要な場合にはax.grid(axis='x',linestyle=...)を追加してください。

42行目:fig.saving

出来上がったグラフを保存します。

形式はpdfでもpngでも大丈夫です。

論文図にはepssvgpdfなどのベクター形式がおすすめです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

このブログでは,PythonやLaTeXの使い方などを紹介しています!
仕事でも趣味でもプログラミングをしています。
ブログは2022年8月にスタートしました。
【経歴】東京大学大学院修了→大手IT企業勤務

コメント

コメントする

目次