2016-03-19 26 views
0

私は次のことをどうすればいいのですか? 私はポイントとクラスを持つDataFrameを持っています。私はすべての点を描画し、各クラスに1つの色を使用したいと思います。どのように授業で凡例の色を参照するのかを指定できますか?matplotlibの伝説

fig = plt.figure(figsize=(18,10), dpi=1600) 
df = pd.DataFrame(dict(points1 = data_plot[:,0], points2 = data_plot[:,1], \ 
      target = target[0:2000])) 
colors = {1: 'green', 2:'red', 3:'blue', 4:'yellow', 5:'orange', 6:'pink', \        
       7:'brown', 8:'black', 9:'white'} 
fig, ax = plt.subplots() 
ax.scatter(df['points1'], df['points2'], c = df['target'].apply(lambda x: colors[x])) 
+0

あなたはあなたが取得している出力とあなたが取得したいと思い出力を最小限の実行可能な例を提供することができますか?あなたの質問を理解して答えやすくなります。 –

答えて

1

各色ごとに個別のエントリを持っているあなたの凡例を取得する最も簡単な方法(したがって、それはtarget値だが)target値の個別プロットオブジェクトを作成することです。

import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 

x = np.random.rand(100) 
y = np.random.rand(100) 
target = np.random.randint(1,9, size=100) 

df = pd.DataFrame(dict(points1=x, points2=y, target=target)) 
colors = {1: 'green', 2:'red', 3:'blue', 4:'yellow', 5:'orange', 6:'pink', \ 
       7:'brown', 8:'black', 9:'white'} 
fig, ax = plt.subplots() 

for k,v in colors.items(): 
    series = df[df['target'] == k] 
    scat = ax.scatter(series['points1'], series['points2'], c=v, label=k) 

plt.legend() 

enter image description here

+0

私は「唯一の方法」とは言っていませんが、まっすぐ進むのです;)プロキシアーティストで楽しいことをすることができます。 http://matplotlib.org/users/legend_guide.html#creating-artists-specifically-for-adding-to-the-legend-aka-proxy-artistsを参照してください。 – tacaswell