46

いくつかのプロットを作成するループがあり、プロットごとに一意のマーカーが必要です。ランダムなシンボルを返す関数を作成し、プログラムで次のように使用することを考えています。

for i in xrange(len(y)):
    plt.plot(x, y [i], randomMarker())

しかし、私はこの方法は良い方法ではないと思います。凡例のプロットを区別するためだけにこれが必要です。プロットは線で接続されてはならず、単なるドットのセットである必要があるためです。

4

5 に答える 5

86

itertools.cycleリストまたはタプルを無期限に繰り返します。これは、マーカーをランダムに選択する関数よりも適しています。

Python 2.x

import itertools
marker = itertools.cycle((',', '+', '.', 'o', '*')) 
for n in y:
    plt.plot(x,n, marker = marker.next(), linestyle='')

Python 3.x

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()

プロット例

于 2012-10-26T18:31:59.527 に答える
13

プロパティをサイクリングするための組み込みの 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

マーカーとカラーサイクルを足し算で組み合わせる

于 2020-01-16T10:06:44.470 に答える
1

マーカー文字を含む配列を手動で作成し、それを使用するだけです。

 markers=[',', '+', '-', '.', 'o', '*']
于 2012-10-26T17:39:18.233 に答える
1
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()
于 2019-02-23T01:30:30.650 に答える