2016-04-20 6 views
-2

Ich möchte ein Liniendiagramm mit mehreren Datensätzen auf den gleichen Achsen plotten, so dass die Markierungen angezeigt werden, aber nicht die Linie. Ich kann wirklich nicht sehen, was ich falsch mache. Kann jemand bitte ein anderes Auge darauf richten? HierMatplotlib Datenpunkte gezeichnet, aber keine Linie zwischen ihnen?

ist die Daten Druck:

looking at 2015-08-05 83.0 AA attribs sector= Materials shape= o kolor= b x = 2015-08-05 y = 83.0 
looking at 2015-08-06 50.0 AA attribs sector= Materials shape= o kolor= b x = 2015-08-06 y = 50.0 
looking at 2015-08-07 42.0 AA attribs sector= Materials shape= o kolor= b x = 2015-08-07 y = 42.0 
looking at 2015-08-10 75.0 AA attribs sector= Materials shape= o kolor= b x = 2015-08-10 y = 75.0 

Hier ist der Code-Segment:

for count, symb in enumerate(my_symbols): 
    sector = sector_format[str(sym_sect[symb])][0] 
    shape = sector_format[str(sym_sect[symb])][1] 
    kolor = sector_format[str(sym_sect[symb])][2] 
    x = my_dates[count] 
    y = rank_2010[count] 
    print("looking at",x,y,symb,"attribs", 
     "sector=",sector, 
     "shape=",shape, 
     "kolor=",kolor, 
     "x =",x, 
     "y = ",y) 

    if symb == 'AA' or symb == "AAPL": 
    plt.plot(x,y,lw=5,color=kolor,linestyle='solid',marker=shape) 

plt.title('hv 20 to 10 ranks') 
plt.xlabel('dates') 
plt.ylabel('symbol ranks') 
plt.show() 

this is what is been plotted right now

+1

Es wäre viel einfacher, wenn wir nicht-string-formatierte Daten erhalten könnten (d. H. In einer Kopie-verarbeitbaren Liste vielleicht). Was ich denke ist, dass Sie jeden Punkt als eine andere Linie zeichnen und sie alle manuell auf die gleichen Marker und Formen setzen. Schalten Sie die Legende ein und Sie werden wahrscheinlich vier verschiedene Datengruppen sehen. Was Sie tun möchten, ist die Daten in 2 Listen 'x, y' zu setzen und diese Listen außerhalb der' for' Schleife an 'plt.plot' zu senden. – ljetibo

+0

Hey da lxetibo, aber der Datensatz ist ein wenig schwierig. Grundsätzlich habe ich 1000 Tage Daten für 100 Symbole. Ich teile die Tage in eine Liste (my_dates [], die die x-Achse ist) und eine andere Liste sind die Rangdaten (rank_2010 []), die die y-Achse ist.) Jetzt für das knifflige Bit. Jeder Rang_2010 hat ein Symbol, das verwendet wird, um einen Sektor nachzuschlagen (in diesem Fall Symbol = AA, was Sektor "Materialien" ist). Ein Sektor hat einen Satz von Attributen, die auf eine Linie angewendet werden, so dass ich alle 100 Symbole geplottet haben möchte benutze ihr relevantes Sektorformat UND wenn ich auf eine Linie zeige, bekomme ich das Symbol. – theakson

Antwort

1

Ihr Problem ist, dass Sie anrufen plot mehrere Male wollen es die sammeln Daten geben Sie es in einem Satz. So funktioniert plot nicht. Sie müssen einen Datensatz (eine "Zeile" in Ihrem Diagramm) erstellen und diese an plot übergeben. Etwas entlang der Linien von:

x_list = [] 
y_list = [] 

for count, symb in enumerate(my_symbols): 
    sector = sector_format[str(sym_sect[symb])][0] 
    shape = sector_format[str(sym_sect[symb])][1] 
    kolor = sector_format[str(sym_sect[symb])][2] 
    x = my_dates[count] 
    y = rank_2010[count] 
    print("looking at",x,y,symb,"attribs", 
     "sector=",sector, 
     "shape=",shape, 
     "kolor=",kolor, 
     "x =",x, 
     "y = ",y) 

    if symb == 'AA' or symb == "AAPL": 
     x_list.append(x) 
     y_list.append(y) 

plt.plot(x_list,y_list,lw=5,color=kolor,linestyle='solid',marker=shape) 

plt.title('hv 20 to 10 ranks') 
plt.xlabel('dates') 
plt.ylabel('symbol ranks') 
plt.show() 

Dies kann nicht genau, was Sie wollen. Ich bin mir nicht sicher, was Sie mit verschiedenen Farben und Marken machen möchten, daher müssen Sie sie möglicherweise ändern. Aber ich denke, es sollte dich zumindest in die richtige Richtung bringen.

+0

Hey CrazyCasta Entschuldigung, ich habe das nicht gelesen, bevor ich auf luetibo geantwortet habe, wo ich aufkläre, warum das etwas komplexer ist als es scheint. Ich werde Ihre Herangehensweise sicherlich versuchen und Ihnen danken, dass Sie sich das angesehen haben. – theakson

+0

Danke für den Versuch, aber kein Glück. Wenn es nur X und Y plotten würde, wäre ich ein fröhlicher Hase, aber ich muss 1000 Tage durchgehen, jeder enthält einen Rang für eine Aktie. Der Rang ist die Y-Achse, das Datum ist die X-Achse, die mir den ersten Punkt gibt. Das Aktiensymbol gibt mir den Sektor, der die Zeilenattribute bestimmt. Also sortiere ich die Datei in die Reihenfolge der Symbole, die bereits in der Reihenfolge des Datums sind. Ich zeichne alle Tage für jede Symbolzeichnung (oder in meinem Fall nicht :-)) die "Linie" durch. Danke für den Versuch aber ich hatte es ausprobiert und habe es wieder mit deinem Code gemacht, kein Glück – theakson

+0

Zeichnet mein Code zumindest Zeilen auf? Ich meine, es ist nicht immer nur Punkte zu machen, oder? – CrazyCasta

Verwandte Themen