線なしでplotする8つの方法。[matplotlib]

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]でした。