gnuplot matplotlib

matplotlib のグラフ作成と gnuplot との対応 比較

投稿日:2023年1月18日 更新日:

起動方法

gnuplot

コマンドで

$ gnuplot

とすれば起動できる。

初期設定ファイルは gnuplotrc にある。

gnuplotrc の場所の見つけ方(macの場合)

https://yanagibrow.hateblo.jp/entry/20130101/1357030013

matplotlib

python ファイル(hogehoge.pyのような名前のファイル)を作る。

(import matplotlib を .py ファイルにインポートしておく。)

プロット内容を hogehoge.py の中に記述する。

python ファイルを実行する。実行方法は

$ python3 hogehoge.py

python は、python3 と python2 があって、print() 関数の書き方などが違っている。

以下では python3 で記述。

散布図(グラフ)の作成

gnuplot

w p または with points で、点プロットができる。

using を使ってプロットしたい列を指定できる。

plot "data.dat" using 2:1 w p

data.dat はデータが入ったテキストファイル。

matplotlib

matplotlib を通例、plt という名前でインポートしてグラフを作成する。

plt.show() でグラフを表示する。

scatter=散布図

import matplotlib.pyplot as plt

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

plt.scatter(x, y)
plt.show()

plt.scatter のかわりに

ax.scatter

を使っても良い。以下は、ax を使う方法。

import matplotlib.pyplot as plt
fig, ax = plt.subplots()

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

ax.scatter(x, y)
plt.show()

プロット点のサイズを変更する

gnuplot

gnuplot > plot "data.dat" ps 10

matplotlib

markersize を次のコマンドで変更する

ax.plot(x,y, marker='o', markersize=20)

プロット点のサイズ変更ができる。

import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(-3,3, 20)y = 2 * x ** 2
fig, ax = plt.subplots()ax.plot(x,y, marker='o', markersize=20)
# プロットを画面に表示する
plt.show()

点の色を変更する

gnuplot

lt (数字)または lt rgb ‘(色の名前を指定)’ で、線の色を変更できる。

gnuplot > plot cos(x) lt -1 # 黒色
# 他の色にする方法
gnuplot > plot sin(x) lc rgb 'gold' # 金色
gnuplot > plot cos(x) lc rgb "red" # 赤色

または

gnuplot> set style line 2 lt rgb "red"
gnuplot> plot sin(x) ls 2

matplotlib

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

x = np.linspace(-3,3, 20)
y = 2 * x ** 2

ax.scatter(x, y, color="#ee0000")
plt.show()

ファイルからデータを読み込み

gnuplot

plot(“data.dat”) でファイルの相対パスを指定する

gnuplot > plot "data.dat"

matplotlib

file open を使う

import matplotlib.pyplot as plt

with open("data.txt") as f:
    data = f.read()
    data = data.split('\n')

    x = [float(row.split(' ')[0]) for row in data]
    y = [float(row.split(' ')[1]) for row in data]

    fig, ax = plt.subplots()
    ax.plot(x,y, marker='o', markersize=5)

    # プロットを画面に表示する
    plt.show()

x軸、y軸にラベルをつける

gnuplot

gnuplot > set xlabel "123 123"
gnuplot > set ylabel "456 456"
gnuplot > plot x*x

matplotlib

set_xlabel と set_ylabel を使う。

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

x = np.linspace(-3,3, 20)
y = 2 * x ** 2

ax.set_xlabel("123 123")
ax.set_ylabel("456 456")

ax.scatter(x, y)
plt.show()

x軸、y軸の描画範囲を変更する

gnuplot

xrange, yrange を設定する。

gnuplot > set xrange [-3:3]
gnuplot > set yrange [-3:3]
gnuplot > replot

matplotlib

set_xlim と set_ylim を使う。

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

x = np.linspace(-3,3, 20)
y = 2 * x ** 2

ax.set_xlim(-3,3)
ax.set_ylim(-10,10)

ax.scatter(x, y)
plt.show()

点つき線でプロットする

gnuplot

with linespoints または w lp で点付き線を使ったプロットができる。

gnuplot > plot 1:2 with linespoints

matplotlib

marker=’o’ を設定する。

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

x = np.linspace(-3,3, 20)
y = 2 * x ** 2

ax.plot(x,y, marker='o', markersize=5)

ax.scatter(x, y)
plt.show()

他に、line2d をインポートして使う方法がある。次のように、ax.add_line で線を追加する。

from matplotlib.lines import Line2D
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3,3, 20)
y = 2 * x ** 3 - 2 * x ** 2 - 3 

line = Line2D(x, y)
fig, ax = plt.subplots()
ax.scatter(x,y)
ax.add_line(line)

# プロットを画面に表示する
plt.show()

サブプロット(複数のグラフをプロットする)

gnuplot

サブプロットやったことないので不明。

matplotlib

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

ax_1 = fig.add_subplot(3,2,1)
ax_2 = fig.add_subplot(2,2,2)
ax_3 = fig.add_subplot(2,1,2)

plt.show()

画面を適当に分割して、グラフをプロットすることができる。

subplot(縦分割数、横分割数、位置の番号)という順番に数値を指定する。

位置の番号は、左から右へ、上から下へと移動している。

グラフのタイトルを設定する。

gnuplot

set title "グラフのタイトル"

matplotlib

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3,3, 20)
y = 2 * x ** 2

fig, ax = plt.subplots()
ax.plot(x,y, marker='o', markersize=20)

plt.title('グラフのタイトル',fontname="Hiragino Sans")
# プロットを画面に表示する
plt.show()

データ点の値に対して、関数を適用する。

gnuplot

gnuplot > plot “data.txt” u 1:($2 * $2)

matplotlib

ブロードキャストという仕組みがある。

以下のコードで、-t^2 の関数を各点に適用することができる。

import matplotlib.pyplot as plt
import numpy as np

def func(t): 
    return -1 * t * t

x = np.linspace(-3,3, 20)
y = x

fig, ax = plt.subplots()
ax.plot(x,func(x), marker='o', markersize=20)

# プロットを画面に表示する
plt.show()

グラフ内に文(アノテーション)を表示する

gnuplot

gnuplot> set label "123_123 abc" at 0,-10
gnuplot> set xrange [-2:2]
gnuplot> plot x**3 - 2*x**2 - 2

matplotlib

アノテーションをつけるには、

ax.annotate

を使う。(図省略)

軸を対数に設定する

gnuplot

gnuplot > set log x
gnuplot > set log y

matplotlib

ax.set_xscale('log')
ax.set_yscale('log')

縦横の背景に罫線(グリッド)を設定する

gnuplot

# 罫線
gnuplot > set grid x
gnuplot > set grid y

# 補助罫線
gnuplot > set grid mxtics
gnuplot > set grid mytics

matplotlib

plt.grid(True)
import matplotlib.pyplot as plt

# MultipleLocator が見つからない場合は、↓を忘れていないかチェック
from matplotlib.ticker import MultipleLocator

fig, ax = plt.subplots()

# y軸 0.3 ごとに実罫線、0.1 ごとに補助罫線を表示する
ax.yaxis.set_major_locator(MultipleLocator(0.3))
ax.yaxis.set_minor_locator(MultipleLocator(0.1))

plt.grid(True, which="major", linestyle="-")
plt.grid(True, which="minor", linestyle="--")

plt.show()

補助目盛りを表示する方法

目盛りの位置を指定する。

「罫線」「minor tics」などで検索すると、やり方が見つかる場合がある。

gnuplot

gnuplot > set mxtics 
gnuplot > set mytics

matplotlib

以下のように、set_major_locator と、set_minor_locator を使って設定する。

import numpy as np
import matplotlib.pyplot as plt

# MultipleLocator が見つからない場合は、↓を忘れていないかチェック
from matplotlib.ticker import MultipleLocator

# 日本語を表示できるようにする
plt.rcParams['font.family'] = 'Hiragino Sans'

fig, ax = plt.subplots()

ax.set_xlim(-3,3)
ax.set_ylim(-1,1)

# x軸 1 ごとに実罫線、0.2 ごとに補助罫線を表示する
ax.xaxis.set_major_locator(MultipleLocator(1.0))
ax.xaxis.set_minor_locator(MultipleLocator(0.2))

# y軸 0.3 ごとに実罫線、0.1 ごとに補助罫線を表示する
ax.yaxis.set_major_locator(MultipleLocator(0.3))
ax.yaxis.set_minor_locator(MultipleLocator(0.1))

plt.grid(True, which="major", linestyle="-")
plt.grid(True, which="minor", linestyle="--")
plt.show()

x, y 軸にラベルを設定する

gnuplot では、set xlabel や set ylabel を使って設定できる。

gnuplot > set xlabel "123"
gnuplot > set ylabel "456"
gnuplot > plot cos(x)
matplotlib でx軸・y軸のラベルは、ax.set_xlabel や ax.set_ylabel で設定することができる。
import numpy as np
import matplotlib.pyplot as plt

# 日本語を表示できるようにする
plt.rcParams['font.family'] = 'Hiragino Sans'

fig, ax = plt.subplots()
ax.set_xlabel('x軸ラベル')
ax.set_ylabel('y軸ラベル')
plt.show()

latex 記法を使った数式をタイトルやラベルに表示する方法

gnuplot

グラフを eps ファイルで出力し、tex ファイルに埋め込みたい場合

gnuplot の出力先を eps とする。 set term で epslatex を設定する。

ギリシャ文字などを入力する方法は次のリンクの記事を参照。

matplotlib

plt.rcParams[‘text.usetex’] = Trueという行を入れることによって、タイトルやテキストで tex 記号が使えるようになる。

import matplotlib.pyplot as plt

# tex 記法を使えるようにする
plt.rcParams['text.usetex'] = True

fig, ax = plt.subplots()

ax.set_title(r'$f(x) = \sin ^2 (x)$')
ax.text(0.5,0.7,r'\TeX\ $\frac{2}{x^2 + a^2}$')

plt.show()

プロット手順を記述したファイルを保存する

gnuplot

gnuplot コマンドを入力して、保存する。

gnuplot > save "savefile.plt"

拡張子は .plt が使われることが多いような気がする。

matplotlib

python ファイルとして、”.py” の拡張子ファイルとして保存する。

プロット手順を記述したファイルを読み込む方法

gnuplot

gnuplot > load "savefile.plt"

matplotlib

通常の python スクリプトを実行するのと同じやり方でファイルを読み込む(ロード)できる。

python savefile.py

python3 の場合には

python3 savefile.py

-gnuplot, matplotlib
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

matplotlib で2種類のcsvファイルをプロットする方法

data1.csv と、data2.csv の2つのファイルを散布図としてプロットするには次のようにする。 例 import numpy as np from matplotlib import py …

no image

matplotlib でグラフの背景の色を変える方法(facecolor)

次のように、axes で facecolor を変更すればよい。 例 from matplotlib import pyplot as plt x = [2,7,8] y = [7,1 …

no image

matplotlib で、2次関数のグラフを描画する方法

2次関数のグラフを表示するには次のようにする。 例 import matplotlib.pyplot as plt import numpy as np # numpy linspace 等間隔な数列 …

no image

matplotlib でcsv ファイルを読み込むとき、最初の行をスキップする方法

numpy の loadtxt で読み込む行を省略したい場合 スキップしたい行を # 等の記号でコメントアウトして、 loadtxt の comments = ‘#’ とすると …

no image

matplotlib の ax でx軸、y軸の端の値を設定する

axes には、set_xlim として定義する。 例 import numpy as np from matplotlib import pyplot as plt x = np.linspace( …