私は複数列の辞書を扱っています。 2つの列をプロットし、その後、3番目と4番目の列に従ってマーカーの色とスタイルを変更したいと思います。
Pylab散布図のマーカースタイルを変更するのに苦労しています。色に対して機能する私のアプローチは、残念ながらマーカースタイルに対しては機能しません。
x=[1,2,3,4,5,6]
y=[1,3,4,5,6,7]
m=['k','l','l','k','j','l']
for i in xrange(len(m)):
m[i]=m[i].replace('j','o')
m[i]=m[i].replace('k','x')
m[i]=m[i].replace('l','+')
plt.scatter(x,y,marker=m)
plt.show()
問題は、marker
は単一の値のみであり、color
パラメーターのようにマーカーのリストではないことです。
マーカー値でグループ化して、同じマーカーを持つxリストとyリストを作成し、それらをプロットすることができます。
xs = [[1, 2, 3], [4, 5, 6]]
ys = [[1, 2, 3], [4, 5, 6]]
m = ['o', 'x']
for i in range(len(xs)):
plt.scatter(xs[i], ys[i], marker=m[i])
plt.show()
または、すべてのドットをプロットすることもできます(これはお勧めしません)。
x=[1,2,3,4,5,6]
y=[1,3,4,5,6,7]
m=['k','l','l','k','j','l']
mapping = {'j' : 'o', 'k': 'x', 'l': '+'}
for i in range(len(x)):
plt.scatter(x[i], y[i], marker=mapping[m[i]])
plt.show()
Viktor Kerkezの答えに追加し、Numpyを少し使用すると、次のようなことができます。
x = np.array([1,2,3,4,5,6])
y = np.array([1,3,4,5,6,7])
m = np.array(['o','+','+','o','x','+'])
unique_markers = set(m) # or yo can use: np.unique(m)
for um in unique_markers:
mask = m == um
# mask is now an array of booleans that van be used for indexing
plt.scatter(x[mask], y[mask], marker=um)