いくつかのプロットを作成するループがあり、プロットごとに一意のマーカーが必要です。ランダムなシンボルを返す関数を作成し、プログラムで次のように使用することを考えています。
for i in xrange(len(y)):
plt.plot(x, y [i], randomMarker())
しかし、私はこの方法は良い方法ではないと思います。凡例のプロットを区別するためだけにこれが必要です。プロットは線で接続されてはならず、単なるドットのセットである必要があるためです。
いくつかのプロットを作成するループがあり、プロットごとに一意のマーカーが必要です。ランダムなシンボルを返す関数を作成し、プログラムで次のように使用することを考えています。
for i in xrange(len(y)):
plt.plot(x, y [i], randomMarker())
しかし、私はこの方法は良い方法ではないと思います。凡例のプロットを区別するためだけにこれが必要です。プロットは線で接続されてはならず、単なるドットのセットである必要があるためです。
itertools.cycle
リストまたはタプルを無期限に繰り返します。これは、マーカーをランダムに選択する関数よりも適しています。
import itertools
marker = itertools.cycle((',', '+', '.', 'o', '*'))
for n in y:
plt.plot(x,n, marker = marker.next(), linestyle='')
import itertools
marker = itertools.cycle((',', '+', '.', 'o', '*'))
for n in y:
plt.plot(x,n, marker = next(marker), linestyle='')
これを使用して、次のようなプロットを生成できます (Python 2.x):
import numpy as np
import matplotlib.pyplot as plt
import itertools
x = np.linspace(0,2,10)
y = np.sin(x)
marker = itertools.cycle((',', '+', '.', 'o', '*'))
fig = plt.figure()
ax = fig.add_subplot(111)
for q,p in zip(x,y):
ax.plot(q,p, linestyle = '', marker=marker.next())
plt.show()
プロパティをサイクリングするための組み込みの pyplot メソッドについては、まだ誰も言及していないようです。だからここにあります:
import numpy as np
import matplotlib.pyplot as plt
from cycler import cycler
x = np.linspace(0,3,20)
y = np.sin(x)
fig = plt.figure()
plt.gca().set_prop_cycle(marker=['o', '+', 'x', '*', '.', 'X']) # gca()=current axis
for q,p in zip(x,y):
plt.plot(q,p, linestyle = '')
plt.show()
ただし、この方法では、カラー サイクルが失われます。cycler
次のように、色とマーカーcycler
オブジェクトを乗算または加算することで、色を元に戻すことができます。
fig = plt.figure()
markercycle = cycler(marker=['o', '+', 'x', '*', '.', 'X'])
colorcycle = cycler(color=['blue', 'orange', 'green', 'magenta'])
# Or use the default color cycle:
# colorcycle = cycler(color=plt.rcParams['axes.prop_cycle'].by_key()['color'])
plt.gca().set_prop_cycle(colorcycle * markercycle) # gca()=current axis
for q,p in zip(x,y):
plt.plot(q,p, linestyle = '')
plt.show()
markercycle
サイクルを追加する場合、それらは同じ長さである必要があるため、その場合は最初の 4 つの要素のみを使用します。
plt.gca().set_prop_cycle(colorcycle + markercycle[:4]) # gca()=current axis
マーカー文字を含む配列を手動で作成し、それを使用するだけです。
markers=[',', '+', '-', '.', 'o', '*']
import matplotlib.pyplot as plt
fig = plt.figure()
markers=['^', 's', 'p', 'h', '8']
for i in range(5):
plt.plot(x[i], y[i], c='green', marker=markers[i])
plt.xlabel('X Label')
plt.ylabel('Y Label')
plt.show()