2017-03-09 1 views
1

Ich habe einen Datenrahmen, der wie folgt aussieht:Erstellen und Leeren von Streudiagramm mit Datum auf der X-Achse - Python, Pandas?

date     number_of_books ... (additional columns) 
1997/06/01 23:15  3 
1999/02/19 14:56  5 
1999/10/22 18:20  7 
2001/11/04 19:13  19 
...      ... 
2014/04/30 02:14  134 

Mein Ziel ist es, eine leere Streudiagramm zu erstellen und dann jeden Punkt einzeln hinzufügen, da die Farbe des Punktes auf anderen Faktoren innerhalb des Datenrahmens abhängt. Ich habe jedoch Probleme, eine Möglichkeit zu finden, ein leeres Streudiagramm zu erstellen, ohne mein Dataframe bereits zu verwenden. Gibt es eine Möglichkeit, das zu tun? (möglicherweise, indem Sie eine Variable die Handlung halten?) Ich möchte, dass die X-Achse das Datum (YYYY/MM/DD) und die Y-Achse die Anzahl der Bücher ist.

Mein Plan ist, die Datumszeichenkette und number_of_book Zeichenketten zu konvertieren, kurz bevor ich sie der Handlung hinzufüge. So wäre die Idee, ...

for index, row in df.itterows() 
    convert date to datetime and number_of_books to int 
    if condition met (based on other columns): 
     plot with color blue 
    else: 
     plot with color red 
+0

Warum Sie nicht nur eine Spalte in der Datenrahmen fügen Sie die Farbe, die Sie für jeden Datenpunkt speichern möchten, und geben sie dann als Argument 'Farbe = 'beim Plotten deiner Daten? – gcalmettes

Antwort

0

Sie könnten eine Spalte in Ihrem pd.DataFrame erstellen die Farbinformationen, zu speichern und die Argumente zu jedem Datenpunkt mit der scatter Plot-Funktion übergeben.

Siehe zum Beispiel:

import pandas as pd 
import matplotlib.pyplot as plt 

# your dataframe 
df = pd.DataFrame({"date": ["1997/06/01 23:15", "1999/02/19 14:56", "1999/10/22 18:20", "2001/11/04 19:13"], 
        "number_of_books": [3, 5, 7, 19]}) 

# add empty column to store colors 
df["color"] = np.nan 

# loop over each row and attribute a conditional color 
for row in range(len(df)): 
    if row<2: #put your condition here 
     df.loc[row, "color"] = "r" 
    else: #second condition here 
     df.loc[row, "color"] = "b" 

# convert the date column to Datetime 
df.date = pd.to_datetime(df.date) 

# plot the data 
plt.scatter([x for x in df.date], df.number_of_books, c=df.color) 
plt.show() 

Imgur

Verwandte Themen