Matplotlib 超入門(3)文字の大きさ,グリッド幅

今回は縦軸と横軸の目盛りの設定方法を見ていきます.そして,前回挿入した文字の大きさの変更方法も扱ってみたいと思います.







今回はこちらのコードをもとにいろいろ設定していきたいと思います.行っていることは [math]y=e^{-x}\cos\left(2\pi x\right)[/math] のグラフを書いています.

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

x = np.arange(0.0, 5.0, 0.05)
plt.plot(x, f(x))

plt.xlabel('x-hoge')
plt.ylabel('y-hoge')
plt.title('IAtLeX')

plt.show()

計算結果
intro3_1

お分かりかとは思いますが,念のため簡単に説明しておきます.最初の二行はnumpyとmatplotlibを使う宣言,4行目と5行目で [math]f\left(t\right)=e^{-t}\cos\left(2\pi t\right)[/math] という関数を定義しています.次に x という名前で「x軸の値に対応する数字の集り」を定義して,次の行で 横軸をx,縦軸をf(x)にして点をプロットしています.線で自動的に結ばれていて,割と細かくメッシュをとっている(0.05)ので滑らかに見えますね.そのあとはラベルとタイトルを付けて最後にウィンドウに表示させています.

文字の大きさ変更

目盛りの数字の大きさを変更

前回の文字の挿入に続く内容になりますが,今回はまず最初に文字の大きさを調整してみましょう.
目盛りの数字の大きさを変更する方法を見てみましょう.plt.show() より前に次の行を追加してみてください.

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

x = np.arange(0.0, 5.0, 0.05)
plt.plot(x, f(x))

plt.xlabel('x-hoge')
plt.ylabel('y-hoge')
plt.title('IAtLeX')
plt.tick_params(labelsize = 30)

plt.show()

実行結果は次のようになります.効果をわかりやすくするためわざと文字をかなり大きくしています.
intro3_2

plt.tick_params(labelsize = 数字 )

plt.tick_params」で目盛りの設定をすることを指示します.後に続く「labelsize」は目盛りの文字の大きさのことで,単位はポイント(pt)です.上の行を追加することで 30pt に設定されます.すると次のように目盛りの文字が大きくなっていることがわかります.

ラベルが収まるように表示させる

上の図を見てみると,わざとラベルの目盛りの文字を大きくしてしまったので,x軸のラベルが半分も見えなくなり,y軸のラベルに至っては全くカットされてしまっています.次に進む前にこちらの修正に取り掛かりましょう.matplotlib はバージョン1.1以降から次の便利なコマンドを用意されています.

plt.tight_layout()

出力の図の範囲を自動的に綺麗に収めてくれる機能です.これを plt.show() より前に書くことできれいな出力が得られます.詳しい説明の公式文章はこちら(http://matplotlib.org/users/tight_layout_guide.html)にあります.Advanced Guide に書いてあることなので公式的には基礎的な使い方ではないという見方のようですが,とても便利なコマンドです.是非こちらの超入門シリーズでも取り入れさせていただきたいと思います.

コード

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

x = np.arange(0.0, 5.0, 0.05)
plt.plot(x, f(x))

plt.xlabel('x-hoge')
plt.ylabel('y-hoge')
plt.title('IAtLeX')
plt.tick_params(labelsize = 30)
plt.tight_layout()

plt.show()

実行結果.ちゃんとラベルが表示されるように出力されている.
intro3_3

ラベル,タイトル,挿入した文字の大きさを変更

上のままだと目盛りの数字だけ変わってしまい,縦軸と横軸のラベルの大きさが変わっていないため,不器用に見えます(目盛りの間隔も不器用に見える原因ですが,これについてはこの投稿の最後の方で説明いたします).ということで,次はラベルの文字の大きさを変更する方法を見ます.plt.xlabel の行を次のように変更してみましょう.「fontsize」というオプションが追加されています.

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)

x = np.arange(0.0, 5.0, 0.05)
plt.plot(x, f(x))

plt.xlabel('x-hoge', fontsize = 30)
plt.ylabel('y-hoge')
plt.title('IAtLeX')
plt.tick_params(labelsize = 30)
plt.tight_layout()

plt.show()

実行結果は次のようになります.
intro3_4

plt.xlabel のオプションに fontziseというものを追加するだけでx軸のラベルのフォントの大きさを変えることができました.この方法でタイトルとy軸のフォントの大きさも変えれます.同じ方法で図中に挿入したテキストの文字の大きさを変えることもできます.一気に見ていきましょう.

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)

x = np.arange(0.0, 5.0, 0.05)
plt.plot(x, f(x))

plt.xlabel('x-hoge', fontsize = 30)
plt.ylabel('y-hoge', fontsize = 30)
plt.title('IAtLeX', fontsize = 30)
plt.text(2.0, -0.4, 'iretaimoji,ookisa=15', fontsize = 15)
plt.tick_params(labelsize = 30)
plt.tight_layout()

plt.show()

実行結果.
intro3_5

グリッド(目盛りの幅)の変更

グリッドを引く場所を直接指定

上の図を見ると,y軸がギュウギュウ詰めになっています.なので,次はy軸の目盛りを調整してみましょう.y軸の目盛りをを引く場所を直接指定するには「plt.ytics」を加えます.

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)

x = np.arange(0.0, 5.0, 0.05)
plt.plot(x, f(x))

plt.xlabel('x-hoge', fontsize = 30)
plt.ylabel('y-hoge', fontsize = 30)
plt.title('IAtLeX', fontsize = 30)
plt.text(2.0, -0.4, 'iretaimoji,ookisa=15', fontsize = 15)
plt.tick_params(labelsize = 30)
plt.tight_layout()
plt.yticks( [0.0, 0.5, 1.0] )

plt.show()

実行結果.
intro3_6

plt.ytics」を入れることで,今まで自動的に決まっていた目盛りが指定された部分のみ引かれることになります.今回は 0.0, 0.5, 1.0 の4か所にのみ目盛りができていることがわかります.yをxに変えてあげればx軸も同様のことができます.

範囲と間隔を指定

目盛りを引く箇所が多くなるといちいち指定していてはラチがあきません.そのようなときは次のような行を追加する方法を使います.

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)

x = np.arange(0.0, 5.0, 0.05)
plt.plot(x, f(x))

plt.xlabel('x-hoge', fontsize = 30)
plt.ylabel('y-hoge', fontsize = 30)
plt.title('IAtLeX', fontsize = 30)
plt.text(2.0, -0.4, 'iretaimoji,ookisa=15', fontsize = 15)
plt.tick_params(labelsize = 30)
plt.tight_layout()
plt.yticks( np.arange(-2.0, 2.0, 0.5) )

plt.show()

np.arange は値の集合(配列)を作るときに以前用いました,上の例だと「-2.0 から 0.5 刻みで 2.5 未満の数をとってくる」すなわち「-2.0, -1.5, -1.0, -0.5, 0.0, 0.5, 1.0, 1.5, 2.0」に目盛りが引かれます.これをプロットすると次のようになります.
intro3_7
指示した通りグリッドを引いてくれましたが,注意していただきたいのは,目盛りを引いた範囲まで出力範囲が広がっているのがわかります.最初から出力範囲がわかっているのであれば,例えばこの例だと

plt.yticks( np.arange(-1.0, 1.0, 0.5) )

のように変更すればよいのです.どうなるかわからない場合には前回習った方法で出力範囲を狭くしておきましょう.ここでは前回とは違い「plt.ylim」という機能を使って表示範囲を設定してみます.

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)

x = np.arange(0.0, 5.0, 0.05)
plt.plot(x, f(x))

plt.xlabel('x-hoge', fontsize = 30)
plt.ylabel('y-hoge', fontsize = 30)
plt.title('IAtLeX', fontsize = 30)
plt.text(2.0, -0.4, 'iretaimoji,ookisa=15', fontsize = 15)
plt.tick_params(labelsize = 30)
plt.tight_layout()
plt.yticks( np.arange(-2.0, 2.0, 0.5) )
plt.ylim(-1.0, 1.0)

plt.show()

実行結果
intro3_8

目盛りの長さと幅の指定

目盛りの文字だけ大きくなって,目盛りそのものは大きさが変わっていません.目盛りそのものの大きさも調整してみましょう.

次のようにやる.

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)

x = np.arange(0.0, 5.0, 0.05)
plt.plot(x, f(x))

plt.xlabel('x-hoge', fontsize = 30)
plt.ylabel('y-hoge', fontsize = 30)
plt.title('IAtLeX', fontsize = 30)
plt.text(2.0, -0.4, 'iretaimoji,ookisa=15', fontsize = 15)
plt.tick_params(labelsize = 30)
plt.tight_layout()
plt.yticks( np.arange(-2.0, 2.0, 0.5) )
plt.ylim(-1.0, 1.0)
plt.tick_params(width = 2, length = 10)

plt.show()

実行結果.
intro3_9

plt.tick_params」のオプションに 「width」を付け加えることで,目盛りの線の太さを変えれます.「length」というオプションを用いると,目盛りの線の長さを変えることができます,数字が大きいほど太く(長く)なります.目盛りの線を長くするのは問題ないですが,太くすると周りの枠より目立ってしまうので,あまり使わないのが得策かもしれないですね.

グラフの太さ

全部大きくしたのに,そのせいで肝心のグラフが細く見えてしまいます.なのでグラフの太さを変更してみます.変更方法はグラフをプロットする「plt.plot」に「lw」というオプションを追加してあげるだけでよいです.「lw」は “line width” の略ですね.

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)

x = np.arange(0.0, 5.0, 0.05)
plt.plot(x, f(x), lw=5)

plt.xlabel('x-hoge', fontsize = 30)
plt.ylabel('y-hoge', fontsize = 30)
plt.title('IAtLeX', fontsize = 30)
plt.text(2.0, -0.4, 'iretaimoji,ookisa=15', fontsize = 15)
plt.tick_params(labelsize = 30)
plt.tight_layout()
plt.yticks( np.arange(-2.0, 2.0, 0.5) )
plt.ylim(-1.0, 1.0)
plt.tick_params(width = 2, length = 10)

plt.show()

実行結果.
intro3_10


少し図が多くて込み入ってしまいましたが,これで文字を大きくしたり,グリッド幅を変更したりできるようになりましたね.書き終えてから気づいたのですが,作業を重ねるごとにきれいになっていくような図を例に挙げて説明した方がよかったと今更後悔しています...まだ自分が初心者なせいもある(最強の逃避)のでご容赦ください.読んでいただきありがとうございます.参考になれば幸いです!!

このブログについて

IAtLeX です.ブログをはじめてさほど時間がたっていないので,未熟な内容が多々あるかと思いますが,それも時間が解決してくれるはず...Python系の記事を着々と充実させていきたいです.投稿主についてはこちらを参照してください.

このブログについて - http://iatlex.com/about_blog/

コメントを残す

*