いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【Python】グラフを描きたい

・お題:y=sinXとy=cosXのグラフを描きたい。

 

・「python グラフ」などで検索すれば情報がたくさん出てくる。しかし、素養のない私のような人間は、すぐにやり方を忘れてしまうし、思い出すにも時間がかかる。そこで、ミニマムパッケージのグラフの書き方をメモしておきたいと思う。とにかく手軽に図示することだけ目指し、オブジェクト指向ではなくpltメソッドを使う。

・今回は、jupyter notebookを使った。本来推奨されないが、plt.show()も省く(IPythonはセルを抜ける際に図示してくれるみたいなので)。

 

・まずはデータセットを作る。

import math


x=[i/10 for i in range(100)]
y1=[math.sin(i/10) for i in range(100)]
y2=[math.cos(i/10) for i in range(100)]

で、y1がsinカーブ、y2がcosカーブ、xが刻みになる。

・とりあえず図示してみる。

import matplotlib.pyplot as plt

plt.plot(x, y1)
plt.plot(x, y2)

これを実行すると、下図のようになる。用途によってはもはや十分。

・「グラフの大きさを設定したい」と思う。

import matplotlib.pyplot as plt

plt.figure(figsize=(4, 4))
plt.plot(x, y1)
plt.plot(x, y2)

・「軸名も追加したい」と思う。

import matplotlib.pyplot as plt

plt.figure(figsize=(4, 4))
plt.plot(x, y1)
plt.plot(x, y2)
plt.xlabel("X")
plt.ylabel("Y")

・「軸の表示範囲を設定したい」と思う。

import matplotlib.pyplot as plt

plt.figure(figsize=(4, 4))
plt.plot(x, y1)
plt.plot(x, y2)
plt.xlabel("X")
plt.ylabel("Y")
plt.xlim(0, 5)
plt.ylim(-1, 2)

・「凡例もつけたい」と思う。

import matplotlib.pyplot as plt

plt.figure(figsize=(4, 4))
plt.plot(x, y1,label="sin")
plt.plot(x, y2,label="cos")
plt.xlabel("X")
plt.ylabel("Y")
plt.xlim(0, 5)
plt.ylim(-1, 2)
plt.legend()

・「グラフを分けて描きたい」と思う。

import matplotlib.pyplot as plt

plt.figure(figsize=(9, 4))

plt.subplot(1, 2, 1)#1行2列にグラフを並べた1番目の場所に描画
plt.plot(x, y1,label="sin")
plt.xlabel("X")
plt.ylabel("Y")
plt.xlim(0, 5)
plt.ylim(-1, 2)
plt.legend()

plt.subplot(1, 2, 2)#1行2列にグラフを並べた2番目の場所に描画
plt.plot(x, y2,label="cos")
plt.xlabel("X")
plt.xlim(0, 5)
plt.ylim(-1, 2)
plt.legend()

・更に横着。"plt."を省略したい場合は、最初のimport~~のところをfrom matplotlib.pyplot import *に変更する。推奨はされないが、plt.がなくても動くようになる。ついでに、凡例を纏めてFigの上の方に表示し、X軸とY軸のラベルも真ん中らへんにまとめると、以下のような感じなった。

from matplotlib.pyplot import *

fig, ax = subplots(1, 2, sharex="all",sharey="all", figsize=(9, 4))

fig.supxlabel("X")
fig.supylabel("Y")
xlim(0, 5)
ylim(-1, 2)

ax[0].plot(x, y1,label="sin",c="blue")
ax[1].plot(x, y2,label="cos",c="red")

handles0, labels0 = ax[0].get_legend_handles_labels()
handles1, labels1 = ax[1].get_legend_handles_labels()
fig.legend(handles0 + handles1, labels0 + labels1, ncol=2, loc="upper center")

 

うねうねしていて楽しい。

 

おわり