2016-07-07 11 views
1

Ich habe einen DataFrame mit einigen Bestandsinformationen erstellt. Wenn ich versuche, den Index als Datenbeschriftungen zu verwenden, funktioniert er nicht. Dies macht es so, dass ich die Aktien nicht unterscheiden kann, besonders wenn ich mehr hinzufüge. Wenn ich die Legende plotte, werden die Indexliste, der Typ und der Name angezeigt. Es scheint, jeden Punkt in einem Etikett zu kombinieren.Index für Streudiagramm verwenden Legende

My Table:

  Dividend ExpenseRatio Net_Assets PriceEarnings PriceSales 
Ticker 
ijr  0.0142   0.12  18.0   20.17  1.05 
ijh  0.0159   0.12  27.5   20.99  1.20 

Mein Plotten Code:

plt.scatter(df.PriceSales, df.PriceEarnings, label = df.index) 
plt.xlabel('PriceSales') 
plt.ylabel('PriceEarnings') 
plt.legend() 
plt.show() 

Meine Legende Ausgabe:

Index(['ijr', 'ijh'],dtype='object',name='Ticker') 

Antwort

1

Ich könnte falsch sein, aber ich denke label=df.index wird nicht funktionieren, wenn der Index ist eine eindeutige Textbeschriftung, die Sie einzeln zeichnen möchten. Wenn Ihr Index eindeutig ist (oder wenn es sich um eine Gruppierung handelt), können Sie eine for-Schleife verwenden, um einzelne Tickerzeilen in einem einzelnen Diagramm zu zeichnen und ihnen eine eindeutige Farbe zu geben (c=np.random.rand(3,1)).

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

df = pd.DataFrame({'Dividend': [0.0142, 0.0159], 'ExpenseRatio': [0.12, 0.12], 
        'Net_Assets': [18.0, 27.5], 'PriceEarnings': [20.17, 20.99], 
        'PriceSales': [1.05, 1.2]}, 
        columns=['Dividend', 'ExpenseRatio', 'Net_Assets', 'PriceEarnings', 'PriceSales'], 
        index=['ijr', 'ijh']) 

df.index.name = 'Ticker' 

for ticker,row in df.iterrows(): 
    plt.scatter(row['PriceSales'], row['PriceEarnings'], label=ticker, c=np.random.rand(3,1), s=100) 

plt.xlabel('PriceSales') 
plt.ylabel('PriceEarnings') 
plt.legend() 
plt.show() 

Ergebnis:

enter image description here

+0

Ihre Lösung gearbeitet! Vielen Dank. – Evy555