概要
本記事では、matplotlib で折れ線を表す lines.Line2D オブジェクトのプロパティについて、解説します。 axes.Axes.plot() などの関数の引数に指定することで、線の色や太さなどを設定できます。
lines.Line2D
lines.Line2D オブジェクトは matplotlib で折れ線を表すオブジェクトです。 通常、直接このオブジェクトを作成することはなく、折れ線を作成する axes.Axes.plot() などの関数の返り値として得られます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots()
lines = ax.plot(x, y1, "-", x, y2, "--")
print(lines)
plt.show()
[<matplotlib.lines.Line2D object at 0x7f528453b750>, <matplotlib.lines.Line2D object at 0x7f528c2c4c50>]
Line2D オブジェクトのプロパティ
Line2D オブジェクトの多くのプロパティがあり、線の色や太さなどを設定できます。
Line2D オブジェクトのプロパティを設定するには、次の方法があります。
- Line2D オブジェクトの setter 関数を呼び出す: すでに作成済みの Line2D オブジェクトのプロパティを変更する場合は、Line2D.set_<プロパティ名>(<設定値>) で設定します。(例: 色を赤にする場合、line.set_color(“red”))
- 折れ線を作成する関数に
<プロパティ名>=<設定値>
という形で引数を指定することで、作成される折れ線にその設定が反映されます。(例: plt.plot(x, y, color=”red”)
一部のプロパティ名は省略名があります。その場合、以下の表の名前の欄にスラッシュで区切って併記しています。
例えば、色を設定するプロパティ color
は c
でも同じ意味になります。(例: plt.plot(x, y, c=”red”))
alpha – 透過度を設定する
alpha
に $[0, 1]$ の範囲の float を指定することで、線やマーカーの透過度を設定できます。
None
を指定した場合、透過なしになります。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 100)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y, alpha=0.5)
plt.show()
antialiased / aa – アンチエイリアスを有効にするかどうかを設定する
antialiased
または aa
に bool を指定することで、アンチエイリアスを有効にするかどうかを設定できます。
antialiased=False
にすると、アンチエイリアスが無効になり、ジャギーが目立つようになります。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 100)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y, antialiased=False)
plt.show()
linestyle / ls – 線のスタイルを設定する
linestyle
または ls
で、線のスタイルを設定できます。
文字列で指定する場合、以下の種類が指定できます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
line_props = {"linestyle": "--", "linewidth": 3, "color": "#1f77b4"}
ax.plot(x, y, **line_props)
plt.show()
点線にする場合、linestyle=(offset, onoffseq)
という書式で指定することで、点線のスタイルをカスタマイズできます。
onoffseq
は長さが偶数である float の配列で、(線の長さ, 空白の長さ, ...)
を指定します。
例えば、(0, (3, 4, 1, 4))
の場合、線 (長さ3), 空白 (長さ4), 線 (長さ1), 空白 (長さ4)
を繰り返すことで、点線を作成します。
offset
は、最初に線を描画し始めるオフセットを指定します。
例えば、(7, (3, 4, 1, 4))
の場合、線 (長さ1), 空白 (長さ4)
から始まり、以降は 線 (長さ3), 空白 (長さ4), 線 (長さ1), 空白 (長さ4)
を繰り返します。
以下にいくつかの折れ線の例を載せました。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
line_props = {"linestyle": (0, (3, 4, 1, 4)), "linewidth": 3, "color": "#1f77b4"}
ax.plot(x, y, **line_props)
plt.show()
solid_capstyle / dash_capstyle – 線分の端のスタイルを設定する
solid_capstyle
で、実線、dash_capstyle
で点線の場合の線分の端のスタイルを設定できます。
通常、折れ線は細いので、どれを設定しても視覚的な違いはほとんどありません。
solid_joinstyle / dash_joinstyle – 線分の結合部分のスタイルを設定する。
solid_joinstyle
で、実線、dash_joinstyle
で点線の場合の線分の結合部分のスタイルを設定できます。
通常、折れ線は細いので、どれを設定しても視覚的な違いはほとんどありません。
linewidth / lw – 線の太さを設定する
linewidth
または lw
に float を指定することで、線の太さを設定できます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
line_props = {"linestyle": "--", "linewidth": 5, "color": "#1f77b4"}
ax.plot(x, y, **line_props)
plt.show()
color / c – 線の色を設定する
color
または c
に色を指定することで、線の色を設定できます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
line_props = {"linestyle": "-", "linewidth": 3, "color": "red"}
ax.plot(x, y, **line_props)
plt.show()
drawstyle / ds – 点同士の結び方を設定する
drawstyle
または ds
に以下の文字列を指定することで、点同士の結び方を設定できます。
default
: 各点同士を直接結びます。steps
/step-pre
: 各点の直後に段差をつけます。step-mid
: 各点の中間に段差をつけます。step-post
: 各点の直前に段差をつけます。
通常、折れ線を作成する場合は、デフォルトである default
のままで問題ないですが、階段関数 を描画したい場合などにこのプロパティを指定します。
marker – マーカーのスタイルを設定する
marker
に値を指定することで、マーカーのスタイルを設定できます。
値 | 画像 | 名前 |
---|---|---|
“.” | point | |
“,” | pixel | |
“o” | circle | |
“v” | triangle_down | |
“^” | triangle_up | |
“<“ | triangle_left | |
“>” | triangle_right | |
“1” | tri_down | |
“2” | tri_up | |
“3” | tri_left | |
“4” | tri_right | |
“8” | octagon | |
“s” | square | |
“p” | pentagon | |
“P” | plus(filled) | |
“*” | star | |
“h” | hexagon1 | |
“H” | hexagon2 | |
“+” | plus | |
“x” | x | |
“X” | x(filled) | |
“D” | diamond | |
“d” | thin_diamond | |
“|” | vline | |
“_” | hline | |
0 or markers.TICKLEFT | tickleft | |
1 or markers.TICKRIGHT | tickright | |
2 or markers.TICKUP | tickup | |
3 or markers.TICKDOWN | tickdown | |
4 or markers.CARETLEFT | caretleft | |
5 or markers.CARETRIGHT | caretright | |
6 or markers.CARETUP | caretup | |
7 or markers.CARETDOWN | caretdown | |
8 or markers.CARETLEFTBASE | caretleft (centered at base) | |
9 or markers.CARETRIGHTBASE | caretright (centered at base) | |
10 or markers.CARETUPBASE | caretup (centered at base) | |
11 or markers.CARETDOWNBASE | caretdown (centered at base) | |
“None” or ” ” or “” | nothing |
latex をマーカーに使えます。
3つのタプルを指定した場合、以下の意味になります。
- (n, 0, 回転角度): 正 $n$ 角形
- (n, 1, 回転角度): 星型 $n$ 角形
- (n, 2, 回転角度): $n$ 本の放射線から成るアスタリスク
ポリゴンの座標を表す (N, 2) の配列を指定することで、オリジナルの図形をマーカーに指定できます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
def create_marker():
"""ハートを表すポリゴンの座標を作成する。
"""
t = np.linspace(0, 2 * np.pi, 20)
x = 16 * np.sin(t) ** 3
y = 13 * np.cos(t) - 5 * np.cos(2 * t) - 2 * np.cos(3 * t) - np.cos(4 * t)
return np.column_stack((x, y))
custom_merker = create_marker()
fig, ax = plt.subplots()
marker_props = {
"marker": custom_merker,
"markersize": 20,
"markerfacecolor": "red",
}
ax.plot(x, y, "-o", **marker_props)
plt.show()
fillstyle – マーカーの塗りつぶし方を設定する
fillstyle
に以下の文字列を指定することで、マーカーの塗りつぶし方を設定できます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
marker_props = {
"fillstyle": "left",
"markersize": 15,
"markerfacecolor": "#1f77b4",
}
ax.plot(x, y, "o-", **marker_props)
plt.show()
markersize / ms – マーカーの大きさを設定する
markersize
または ms
に float を指定することで、マーカーの大きさを設定できます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
marker_props = {
"markersize": 10,
}
ax.plot(x, y, "o-", **marker_props)
plt.show()
markeredgewidth / mew – マーカーの境界線の太さを設定する
markeredgewidth
または mew
で、マーカーの境界線の太さを設定できます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
marker_props = {
"markersize": 10,
"markeredgewidth": 2.0,
"markeredgecolor": "red",
"markerfacecolor": "white",
}
ax.plot(x, y, "o-", **marker_props)
plt.show()
markeredgecolor / mec – マーカーの境界線の色を設定する
markeredgecolor
または mec
で、 マーカーの境界線の色を設定できます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
marker_props = {
"markersize": 10,
"markeredgewidth": 2.0,
"markeredgecolor": "green",
"markerfacecolor": "white",
}
ax.plot(x, y, "-o", **marker_props)
plt.show()
markerfacecolor / mfc – マーカーの内部の色を設定する
markerfacecolor
または mfc
で、マーカーの内部の色を設定できます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
marker_props = {
"markersize": 10,
"markeredgewidth": 2.0,
"markeredgecolor": "green",
"markerfacecolor": "white",
}
ax.plot(x, y, "-o", **marker_props)
plt.show()
markerfacecoloralt – マーカーの内部の色を設定する
markerfacecoloralt
で、fillstyle
で full
以外を指定した場合に、マーカーの内部の塗りつぶさない部分の色を指定します。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 10)
y = np.sin(x)
fig, ax = plt.subplots()
marker_props = {
"fillstyle": "top",
"markersize": 15,
"markerfacecolor": "white",
"markerfacecoloralt": "black",
}
ax.plot(x, y, "-o", **marker_props)
plt.show()
markevery – マーカーの配置間隔を設定する
markevery
で、マーカーの配置間隔を設定できます。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, np.pi * 2, 50)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y, "-o", markevery=3)
plt.show()
コメント