プロットを行うスクリプトを書いています。それぞれが独自のラインスタイル(色ではない)を持つ複数のデータシリーズをプロットするようにします。リストを簡単に反復処理できますが、Pythonで既に使用可能なリストはありますか?
plot
documentation
http://matplotlib.org/1.5.3/api/pyplot_api.html#matplotlib.pyplot.plot には、ライン+マーカースタイルのリストがあります。
character description
'-' solid line style
'--' dashed line style
'-.' dash-dot line style
':' dotted line style
'.' point marker
',' pixel marker
'o' circle marker
'v' triangle_down marker
'^' triangle_up marker
'<' triangle_left marker
'>' triangle_right marker
'1' tri_down marker
'2' tri_up marker
'3' tri_left marker
'4' tri_right marker
's' square marker
'p' pentagon marker
'*' star marker
'h' hexagon1 marker
'H' hexagon2 marker
'+' plus marker
'x' x marker
'D' diamond marker
'd' thin_diamond marker
'|' vline marker
'_' hline marker
これはpyplot.plot
docstringの一部であるため、以下を使用して端末から表示することもできます。
import matplotlib.pyplot as plt
help(plt.plot)
私の経験から、色とマーカーをリストに入れておくといいので、プロットするときにそれらを繰り返すことができます。
そのようなもののリストを取得する方法は次のとおりです。掘り出しました。
import matplotlib
colors_array = matplotlib.colors.cnames.keys()
markers_array = matplotlib.markers.MarkerStyle.markers.keys()
Python3では、.keys()
メソッドはlist
ではなく_dict_keys
_オブジェクトを返します。 python2でできるように配列にインデックスを付けることができるように、結果をlist()
に渡す必要があります。例えば this SO question
したがって、線、色、マーカーの反復可能な配列を作成するには、次のようなものを使用できます。
_import matplotlib
colors_array = list(matplotlib.colors.cnames.keys())
lines_array = list(matplotlib.lines.lineStyles.keys())
markers_array = list(matplotlib.markers.MarkerStyle.markers.keys())
_
リストにアクセスするという質問には直接答えていませんが、このページにもう1つの選択肢があると便利です。破線スタイルを生成する追加の方法があります。
次のような横縞でAとBの間に線を生成できます
A ||||||||||||||||||||||||||||||||||||||||||||| B
A || || || || || || || || || || || || || || || || B
A | | | | | | | | | | | | | | | | | | | | | | | | B
線の幅を広げてandカスタムダッシュパターンを指定します。
ax.plot(x, y, dashes=[30, 5, 10, 5])
_matplotlib.lines.Line2D
_のドキュメント これは言うset_dashes(seq)
について:
ダッシュシーケンス、オンオフインクをポイントとするダッシュのシーケンスを設定します。 seqが空の場合、またはseq =(None、None)の場合、線種は実線に設定されます。
ACCEPTS:点のオン/オフインクのシーケンス
線を描くと、数字のシーケンスが線に沿ってペイントされるポイントの数を指定し、次に、残っているポイントの数(2つの数字がある場合)、ペイントされる数、ペイントされていないものの数(シーケンスに4つの数字がある場合)。 4つの数値を使用して、一点鎖線を生成できます。[30、5、3、5]は、30ポイントの長さのダッシュ、5ポイントのギャップ、3ポイントのダッシュ(ドット)、および5 -ポイントギャップ。その後、繰り返します。
ドキュメントのこのページ この可能性について説明しています。 こちらをご覧ください それを行う2つの異なる方法について。
辞書は Linestyleの例 からコピーできます:
from collections import OrderedDict
linestyles = OrderedDict(
[('solid', (0, ())),
('loosely dotted', (0, (1, 10))),
('dotted', (0, (1, 5))),
('densely dotted', (0, (1, 1))),
('loosely dashed', (0, (5, 10))),
('dashed', (0, (5, 5))),
('densely dashed', (0, (5, 1))),
('loosely dashdotted', (0, (3, 10, 1, 10))),
('dashdotted', (0, (3, 5, 1, 5))),
('densely dashdotted', (0, (3, 1, 1, 1))),
('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
('dashdotdotted', (0, (3, 5, 1, 5, 1, 5))),
('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))])
その後、ラインスタイルを反復処理できます
fig, ax = plt.subplots()
X, Y = np.linspace(0, 100, 10), np.zeros(10)
for i, (name, linestyle) in enumerate(linestyles.items()):
ax.plot(X, Y+i, linestyle=linestyle, linewidth=1.5, color='black')
ax.set_ylim(-0.5, len(linestyles)-0.5)
plt.show()
または、それらから単一の線種を取ります。
ax.plot([0,100], [0,1], linestyle=linestyles['loosely dashdotdotted'])