LoginSignup
2
3

More than 3 years have passed since last update.

資料作りのためのmatplotlib入門(1) 1次元図

Last updated at Posted at 2018-03-09

この記事のターゲット

  • 理論シミュレーションとかで出てきたデータをグラフ化する方法を探している人
  • 今までgnuplotを使っていたけどPythonにも興味がある人
  • でも何からやればいいのかよくわからない人
  • というか「matplotlib、いろんな流儀ありすぎィ!」って混乱してる人

目次

  1. 1次元図(この記事)
  2. 2次元contour図 https://qiita.com/Bluepost59/items/a0869aee34db3f450162

想定しているデータ形式

配列を扱える言語は多い。fortranでもCでも多次元配列は普通に使えるが、出力する場合は、例えば次のようなコードで出すことが多いと思う。

do i=1,Nx
   write(UNITNUM,*) i,a(i)
end do

このコードを実行すると、次のような形でデータが並ぶことになる。

1 0.000E00
2 0.628E00
...
10 0.810E01

matplotlibのインポート

Pythonでグラフを書くときは、次のライブラリを使う。

  • NumPy
    行列を扱うためのライブラリ
  • matplotlib
    グラフを書くライブラリ
  • matplotlib.pyplot
    matplotlibのインターフェースのようなもの

おのおのの詳細についてはもっとググってもらうとして、この三つがあればグラフは書ける。
普通にローカルのPCにインストールする場合、GUIが使えるが、たとえばリモートのスパコン上のデータを可視化したりするときは必ずしもGUIが使えるとは限らない。そのときは画像に出力する設定(gnuplotのset term pngcairoのような感じ)をしなければならないが、ここにつまづくポイントがある。
まず、NumPyとmatplotlibをインストールする。次にmatplotlib.pyplotをインストールする前に、matplotlibをpngで出力するように設定する。具体的には次のようになる。

import numpy as np
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt

この順番を間違えるとエラーが出る。

データの読み込みと整列

データの読み込みはnumpyのloadtxt関数で行う。これはNumpy配列を返す関数で、以下のように記述する。

mydata = np.loadtxt('mydata.txt')

このときmydataの中身は

[[1,0.0000],
[2,0.628],
...,
10,0.810]]

とNx行2列行列となる。
一方、matplotlibで描画に用いるplotメソッドは、次のようになる。

myax.plot(x,y)

このxが横軸、yが縦軸の数値リストであり、ともに同じ次元を持つ1次元リストでなければならない。つまりnp.loadtxtで読み込んだmydataからx,yに整列する必要がある。ただし今回は「mydataの1列目」と「mydataの2列目」とするだけでよいので、次のように指定するだけでグラフにできる。

myax.plot(mydata[:,0],mydata[:,1])

サンプルコード

import numpy as np
import matplotlib as mpl
matplotlib.use('Agg')
import matplotlib.pyplot as plt

mydata = np.loadtxt('mydata.txt')

myfig = plt.figure()
myax = myfig.add_subplot(1,1,1)

myax.plot(mydata[:,0],mydata[:,1])

myfig.savefig('mydata.png')
myfig.clf()

ここでfigureとaxesについて触れておく。figureとaxesはmatplotlibのオブジェクトで、figureが画像全体で、axesは各グラフに対応する。イメージとしてはfigureという台紙にグラフに対応するaxesを貼り付けていくような感じである。pltに直接メソッドを作用させていくやり方もあるが、このサンプルコードのようにfigureオブジェクトとaxesオブジェクトを定義するやり方もあり、後者の方が複数枚並置する場合などに拡張しやすい。

2
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
2
3