0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

理系レポートのためのmatplotlib入門

Last updated at Posted at 2024-12-01

導入

matplotlibを用いての理系レポートの作成において,学生レポートに使用できるようなグラフ体裁を載せているQiitaが見当たらなかったため,初心者ながら書かせていただきます.
拙い点多々あるかと思いますが,温かい目で見ていただけると幸いです.

環境

  • googlecolabratory

グラフの作成

必要最低限のコード

ここでは必要最低限のものを載せる.必要な説明はコメント(#)で載せてあるため,説明は割愛することとする.必要なものがあれば下の項目から探して追加してほしい

import matplotlib

# データ点の定義
x = [1,2,3]
y = [2,3,1]

# 画像を用意
fig = matplotlib.pyplot.figure()

# figの上にsubplotを用いてグラフオブジェクトを作成
graph = fig.add_subplot(1,1,1)

# データ点を散布図にしてグラフエリアに描画
graph.scatter(x,y)

# 表示
matplotlib.pyplot.show()

image.png

第二軸の作成

理系レポートでは上軸と右軸にも目盛りをつけなくてはならない.その時は `グラフオブジェクト.twinx()` や `グラフオブジェクト.twiny()` メソッドを使うと副軸を作成できる.
import matplotlib

x = [1,2,3]
y = [2,3,1]

fig = matplotlib.pyplot.figure()

graph = fig.add_subplot(1,1,1)
graph.scatter(x,y)

# x軸の第二軸の軸オブジェクトを定義
axis_x = graph.twinx()

# x軸の第二軸の軸オブジェクトを定義
axis_y = graph.twiny()

matplotlib.pyplot.show()

image.png

軸の定義域の設定

グラフの定義域を変更したい場合は{グラフor軸オブジェクト}.set_xlim({low},{upper}) or set_ylim({low},{upper})にて設定を行える.

import matplotlib

x = [1,2,3]
y = [2,3,1]

figure = matplotlib.pyplot.figure()

graph = figure.add_subplot(1,1,1)
graph.scatter(x,y)

# 0~10で定義域を設定
graph.set_ylim(0,10)

# -10~10で定義域を設定
graph.set_xlim(-10,10)

matplotlib.pyplot.show()

image.png

前章の第二軸でも上軸と下軸があっていないのでそれをそろえるため,{グラフ or 軸オブジェクト}.get_xlim()で定義域を取得し,それをもとに第二軸の定義域を定めている.

import matplotlib

x = [1,2,3]
y = [2,3,1]

figure = matplotlib.pyplot.figure()

graph = figure.add_subplot(1,1,1)
graph.scatter(x,y)


axis_x = graph.twinx()
# get_ylimで取得した定義域を第二軸に適応
axis_x.set_ylim(graph.get_ylim())

axis_y = graph.twiny()
# get_xlimで取得した定義域を第二軸に適応
axis_y.set_xlim(graph.get_xlim())

matplotlib.pyplot.show()

image.png

目盛りを内側にする

理系レポートでのグラフは目盛りを内側にするのがデフォルトである.そんな時はグラフ or 軸オブジェクト}.tick_params(direction = 'in')を用いて内側にすることができる.

import matplotlib

x = [1,2,3]
y = [2,3,1]

figure = matplotlib.pyplot.figure()

graph = figure.add_subplot(1,1,1)
graph.scatter(x,y)

# グラフ主軸を内側にする
graph.tick_params(direction = "in")

matplotlib.pyplot.show()

image.png

目盛りの数字をなくす

目盛りに書いてある1.00や3.00を消す方法をここでは触れる.グラフ or 軸オブジェクト.setxticklabels()の引数に空配列を指定することですべての目盛りが消える.

 import matplotlib

x = [1,2,3]
y = [2,3,1]

figure = matplotlib.pyplot.figure()

graph = figure.add_subplot(1,1,1)
graph.scatter(x,y)

# 目盛りの数値を消滅させる
graph.set_xticklabels([])
graph.set_yticklabels([])

matplotlib.pyplot.show()

image.png

対数軸を利用する

データ点の幅が広いときは対数表記にするのが通例になっている.その時はグラフ or 軸オブジェクト.set_xscale('log')を利用するとよい.

import matplotlib

x = [100,2,30]
y = [2,30,100]

figure = matplotlib.pyplot.figure()

gragh_1 = figure.add_subplot(1,1,1)
gragh_1.scatter(x,y)

# x軸もy軸も対数プロットにした両対数を作成
gragh_1.set_xscale("log")
gragh_1.set_yscale("log")

matplotlib.pyplot.show()

image.png

二つのグラフをプロット

二つの実験データを比較したいとき同じグラフに行るグラフを乗っけるときが多々ある.その時は`グラフオブジェクト.図の種類(データ配列)`で乗っけることができる.

import matplotlib
import math

x = [1,2,3]
y = [2,3,1]

# 二つ目としてsinカーブのデータを定義
x2 = [i/10 for i in range(0,100)]
y2 = [math.sin(i) for i in x2]

fig = matplotlib.pyplot.figure()

graph_1 = fig.add_subplot(1,1,1)
graph_1.scatter(x,y)
# sinカーブを折れ線グラフとしてプロット
graph_1.plot(x2,y2)


matplotlib.pyplot.show()

image.png

軸ラベルを置く

x軸,y軸がそれぞれ何を表しているかを表すものを軸ラベルという.matplotlibではグラフ or 軸オブジェクト.set_xlabel(ラベル名)で設定できる.ラベル名は$マークで挟むことによってTeX形式を用いることも可能である.

import matplotlib

x = [100,2,30]
y = [2,30,100]

figure = matplotlib.pyplot.figure()

gragh_1 = figure.add_subplot(1,1,1)
gragh_1.scatter(x,y)

# x軸,y軸にラベルを作成
gragh_1.set_xlabel("temperture $T$/K")
gragh_1.set_ylabel("time $t$/s")

matplotlib.pyplot.show()

image.png

完成品

すべてを使用した完成品を下に示す

import matplotlib

# データの定義
x = [1,200,3000,1251]
y = [200,3000,1251,1000]

# 画像オブジェクトの定義
figure = matplotlib.pyplot.figure()

# グラフオブジェクトの作成
gragh_1 = figure.add_subplot(1,1,1)
# グラフオブジェクトを散布図に設定
gragh_1.scatter(x,y)

# 軸ラベルを付ける
gragh_1.set_xlabel("$time $ t $ /s$")
gragh_1.set_ylabel("$tempertue $ T $ /s$")

# 第二軸(上)を作成し,定義域を下と合わせる
axis_x = gragh_1.twinx()
axis_x.set_ylim(gragh_1.get_ylim())

# 第二軸(右)を作成し,定義域を左と合わせる
axis_y = gragh_1.twiny()
axis_y.set_xlim(gragh_1.get_xlim())

# すべてを対数プロットを採用
gragh_1.set_xscale("log")
gragh_1.set_yscale("log")
axis_x.set_yscale("log")
axis_y.set_xscale("log")

# 対数プロットをすると定義域がずれるので再定義
axis_x.set_ylim(gragh_1.get_ylim())
axis_y.set_xlim(gragh_1.get_xlim())

# すべてを内向きにする
gragh_1.tick_params(which='both',direction = "in")
axis_x.tick_params(which='both',direction = "in")
axis_y.tick_params(which='both',direction = "in")

# 目盛りの数値を非表示にする
axis_y.set_xticklabels([])
axis_x.set_yticklabels([])

matplotlib.pyplot.show()

image.png

以上になります.本記事で触れたのは使える最低限の知識であり,legendを入れたり,最小二乗法を入れたい場合は別記事をご参照ください.

最後まで駄文を読んでくださりありがとうございました.

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?