2016-11-19 2 views
0

Ich kann eine Variable nicht zeichnen, wo die Punkte durch Verweis auf einen Index farbig sind. Was ich letztendlich will, ist das Liniensegment jedes Punktes (Verbindung mit dem nächsten Punkt) als eine bestimmte Farbe. Ich habe mit Matplotlib und pandas versucht. Jede Methode gibt einen anderen Fehler aus.Fehler beim Versuch, mehrfarbige Linie in Python zu plotten

Generieren eine Trend-line:

datums = np.linspace(0,10,5) 
sinned = np.sin(datums) 

plt.plot(sinned) 

edgy sin graph

Nun erzeugen wir eine neue Spalte der Etiketten:

sinned['labels'] = np.where((sinned < 0), 1, 2) 
print(sinned) 

Welche unseren letzten Datenbestand zu erzeugen:

  0 labels 
0 0.000000  2 
1 0.598472  2 
2 -0.958924  1 
3 0.938000  2 
4 -0.544021  1 

Und nun zum Plotten Versuch:

plt.plot(sinned[0], c = sinned['labels']) 

, die in dem Fehler führt: length of rgba sequence should be either 3 or 4

Ich habe auch versucht, die Etiketten Einstellung die Saiten 'r' oder 'b' zu sein, die nicht entweder :-/

+1

Mögliches Duplikat [Python: Wie in verschiedenen Farben eine Linie zeichnen] (http://stackoverflow.com/questions/17240694/python-how-to-plot-one-line -in-different-colors) – ImportanceOfBeingErnest

+0

Sieh dir diese Frage an: http://stackoverflow.com/questions/17240694/python-how-to-plot-one-line-in-different-colors Es gibt auch eine Matplotlib [Beispiel über Malvorlagen] (http://matplotlib.org/examples/pylab_examples/multicolored_line.html) – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest Ich gehe gerade durch die Fragen, die Sie jetzt vorgeschlagen haben. –

Antwort

1
funktionierten

1 und 2 sind keine Farbe, 'b' lue und 'r' ed werden im folgenden Beispiel verwendet. Sie müssen jede einzeln grafisch darstellen.

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

datums = np.linspace(0,10,5) 

sinned = pd.DataFrame(data=np.sin(datums)) 
sinned['labels'] = np.where((sinned < 0), 'b', 'r') 
fig, ax = plt.subplots() 

for s in range(0, len(sinned[0]) - 1): 
    x=(sinned.index[s], sinned.index[s + 1]) 
    y=(sinned[0][s], sinned[0][s + 1]) 
    ax.plot(x, y, c=sinned['labels'][s]) 
plt.show() 

Output