17

複数列の辞書を扱っています。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()
4

3 に答える 3

17

問題は、パラメーター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()
于 2013-09-14T11:04:39.013 に答える
15

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 can be used for indexing  
    plt.scatter(x[mask], y[mask], marker=um)
于 2013-09-15T05:27:19.293 に答える
5

私にとって最も簡単な解決策は、pandasandを使用することでしたseaborn

import pandas as pd   # '0.25.3'
import seaborn as sns # '0.9.0'

data = pd.DataFrame(
    dict(x=[1,2,3,4,5,6],
    y=[1,3,4,5,6,7],
    m=['k','l','l','k','j','l'],)
)

sns.scatterplot(data=data, x='x', y='y', style='m')

プロット

seabornマーカー スタイルが自動的に選択されます。

于 2019-11-27T18:56:43.517 に答える