2016-09-28 5 views
1

は私が持っていると言うことができます追加のデータに基づいてプロットのための複数のマーカーは、以下のデータがmatplotlibのは -

x=[0,1,2,3,4,5,6,7,8,9] 
y=[1.0,1.5,2.3,2.2,1.1,1.4,2.0,2.8,1.9,2.0] 
z=['A','A','A','B','B','A','B','B','B','B'] 
plt.plot(x,y, marker='S') 

は私に正方形のマーカーとX-Yプロットを与えるだろうと言います。データ 'z'に基づいてマーカーのタイプを変更する方法はありますか?すべての 'A'タイプは正方形のマーカーを持ち、 'B'タイプは三角形のマーカーを持っています。

私はそれが(「A」から「B」またはその逆に、この場合には)一つのタイプから別のものに変更した場合にのみ曲線に「Z」データを追加する

答えて

1
import matplotlib.pyplot as plt 

fig = plt.figure(0) 
x=[0,1,2,3,4,5,6,7,8,9] 
y=[1.0,1.5,2.3,2.2,1.1,1.4,2.0,2.8,1.9,2.0] 
z=['A','A','A','B','B','A','B','B','B','B'] 
plt.plot(x,y) 

if 'A' in z and 'B' in z: 
    xs = [a for a,b in zip(x, z) if b == 'A'] 
    ys = [a for a,b in zip(y, z) if b == 'A'] 
    plt.scatter(xs, ys, marker='s') 

    xt = [a for a,b in zip(x, z) if b == 'B'] 
    yt = [a for a,b in zip(y, z) if b == 'B'] 
    plt.scatter(xt, yt, marker='^') 
else: 
    plt.scatter(x, y, marker='.', s=0) 


plt.show() 

または

import matplotlib.pyplot as plt 

fig = plt.figure(0) 
x=[0,1,2,3,4,5,6,7,8,9] 
y=[1.0,1.5,2.3,2.2,1.1,1.4,2.0,2.8,1.9,2.0] 
z=['A','A','A','B','B','A','B','B','B','B'] 
plt.plot(x,y) 

if 'A' in z and 'B' in z: 
    plt.scatter(x, y, marker='s', s=list(map(lambda a: 20 if a == 'A' else 0, z))) 
    plt.scatter(x, y, marker='^', s=list(map(lambda a: 20 if a == 'B' else 0, z))) 
else: 
    plt.scatter(x, y, marker='.', s=0) 


plt.show() 
+0

残念ながら私のデータポイントは巨大(10K)なので、散点が重なり合ってプロットが乱雑になります。これは単純なラインプロットでは機能しますか? – WanderingMind

+0

@WanderingMind *単純な線のプロット*とはどういう意味ですか? – Leon

+0

はい、私は図形のサイズとマーカーのサイズを変更して散布図で問題を修正しました。私は今あなたの答えを受け入れることができます。 – WanderingMind