matplotlibで、線をつけずにplotする8つの方法を紹介します。
目次
線なしでplotする方法
概要
次のいずれかの方法で線を消せます。
- ax.plot(X, Y, linestyle=”)
- ax.plot(X, Y, linewidth=0)
- ax.scatter(X, Y)
Playgrounds
詳細
次の図のようにmatplotlibで、線をつけずにプロットするには、次の方法があります。
- plotの引数に指定する方法
- linestyle=’None’
- linewidth=0
- プロットスタイルをStringで指定: plot(x, y, ‘o’)
- plot後にLine2Dのメソッドを使用する方法
- Line2D.set_linestyle(”)
- Line2D.set_linewidth(0)
- デフォルト値(rcParams)を書き換える方法
- matplotlib.rcParams
- matplotllib.rc()
- 散布図scatter()を使う方法
- scatter(x, y)
一番目のlinestyleで指定する方法か、最後の散布図を使うのが一般的かと思います。
それぞれの方法について、詳しく見ていきましょう。
plot引数に指定する方法
matplotlib.axes.Axes.plotの引数で、線のスタイルや線幅を指定すれば、線を消すことができます。
linestyle=’None’
linestyleに {‘None’, ‘ ‘, ”}のいずれかを指定すると、線を描画しません。linestyleはlsと略記することもできます。
- plot(X, Y, linestyle=’None’)
- plot(X, Y, linestyle=’ ‘)
- plot(X, Y, ls=”)
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0, 1, 20) #0~1の範囲で均等に20点を生成する
Y = np.sin(X * 2 * np.pi) # np.pi = 3.14...
fig, ax = plt.subplots()
ax.plot(X, Y, linestyle='None', marker='o') # {'None', ' ', ''}のいずれか。
fig.show()
デフォルトで、マーカーも描画しないことになっている場合は、線を消すと何も表示されなくなります。ここでは、マーカーは表示するように、marker=’o’を指定しています。
linewidth=0
linewidth=0で線幅を0にすることでも、線を消すことができます。lwと略記できます。
- plot(X, Y, linewidth=0)
- plot(X, Y, lw=0)
前項のコード例でplot部分を次のようにすると、挙動を確認できます。
ax.plot(X, Y, linewidth=0, marker='o')
linewidthは、float値を受け取ります。
プロットスタイルをStringで指定
plot引数にx, yに続いて、String値を渡すと、プロットスタイルを指定することができます。'[マーカー][線スタイル][色]’の順で渡します。
線スタイルの部分をスペースにするか何も入れないと、線を消すことができます。
- plot(X, Y, ‘o’) #marker=’o’, linestyle=”を指定。
- plot(X, Y, ‘o g’) #marker=’o’, linestyle=’ ‘, color=’green’を指定。
- plot(X, Y, ‘.r’, X, Y, ‘og’) #1つ目に’.r’を、2つ目に’og’を指定。
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0, 1, 20)
Y = np.sin(X * 2 * np.pi)
fig, ax = plt.subplots()
ax.plot(X, Y, 'o')
ax.plot(X, Y+0.2, '.-r')
ax.plot(X, Y+0.4, 'oC4', X, Y+0.6, 'oC5') #C4は4番目の色
fig.show()
ドキュメントでは、plot([x], y, [fmt])などと紹介されますが、plot(x, y, fmt=’o’)などとキーで指定することはできません。
plot後にLine2Dのメソッドを使用する方法
plotは、matplotlib.lines.Line2Dクラスを呼び出して描画を行っていますので、plotをカスタマイズしたい場合には、Line2Dクラスのプロパティを見ればよいことになります。
plotはLine2Dのインスタンスのリストを返しますので、それを使用してplot呼び出し後に線を消す方法を見てみましょう。
Line2D.set_linestyle(”)
Line2D.set_linestyle()または、そのエイリアスである Line2D.set_ls()に {‘None’, ‘ ‘, ”}のいずれかを指定すれば、線を描画しないようにできます。
- set_linestyle(‘None’)
- set_ls(”)
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0, 1, 20) #0~1の範囲で均等に20点を生成する
Y = np.sin(X * 2 * np.pi) # np.pi = 3.14...
fig, ax = plt.subplots()
line, = ax.plot(X, Y, 'o') #Line2Dのlistが返されるので、0番目だけ取得
line.set_ls('')
fig.show()
Line2D.set_linewidth(0)
Line2D.set_linewidth()または、そのエイリアスである set_lw()に0を指定すれば、線を描画しないようにできます。
- set_linewidth(0)
- set_lw(0)
上の項で、line.set_ls(”)の部分を次のように変更すると、挙動を確認できます。
line.set_lw(0)
set_linewidth()は、float値を受け取ります。
デフォルト値(rcParams)を書き換える方法
matplotlibのデフォルト値(rc setting)を実行時に変更する方法でも、線を消すことができます。
辞書変数のmatplotlib.rcParamsを書き換えるか、書き換え用の関数matplotlib.rc()を呼びます。書き換え以降のplotで有効になります。
ちなみに.bashrcなどでもみかけるこのrcは、”run command”, “runcom”の略らしいです。
matplotlib.rcParams
線スタイルに関係するパラメーターは、頭に’lines.’をつけて指定します。[‘lines.linestyle’]に’None’を指定するなどすれば、線を消すことができます。
- matplotlib.rcParams[‘lines.linestyle’] = ”
- matplotlib.rcParams[‘lines.linewidth’] = 0
- matplotlib.rcParams[‘lines.marker’] = ‘o’
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0, 1, 20)
Y = np.sin(X * 2 * np.pi)
mpl.rcParams['lines.linewidth'] = 0
mpl.rcParams['lines.linestyle'] = ''
mpl.rcParams['lines.marker'] = 'o'
fig, ax = plt.subplots()
ax.plot(X, Y)
fig.show()
matplotlib.rc()
matplotlib.rc(‘lines’, **kwargs) の**kwargs部分にlinewidthなどを指定すると、mpl.rcParams[‘lines.linewidth’]を指定したのと同等になります。
- matplotlib.rc(‘lines’, linestyle=”)
- matplotlib.rc(‘lines’, linewidth=0)
- matplotlib.rc(‘lines’, linewidth=0, linestyle=”, marker=’o’)
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0, 1, 20)
Y = np.sin(X * 2 * np.pi)
matplotlib.rc('lines', linewidth=0, linestyle='', marker='o')
fig, ax = plt.subplots()
ax.plot(X, Y)
fig.show()
散布図scatter()を使う方法
Axes.plot()で呼び出されるLine2Dは基本的には線付きの描画を行うクラスですが、線なしの描画を行うAxes.scatter(散布図)クラスを使う方法もあります。
Axes.scatter(x, y)
plot()をscatter()と書き換えれば、線なしにできます。
- Axes.scatter(x, y)
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0, 1, 20)
Y = np.sin(X * 2 * np.pi)
fig, ax = plt.subplots()
ax.scatter(X, Y)
fig.show()
まとめ
matplotlibで、線をつけずにplotする8つの方法を紹介しました。plot時に、plot(x, y, ls=0)とするか、scatter(x, y)を使う方法が簡単かと思います。
以上、線なしでplotする8つの方法。[matplotlib]でした。