2017-05-02 4 views
3

Ich versuche, Daten für ein ganzes Jahr als ein Polardiagramm in Matplotlib zu plotten, und habe Schwierigkeiten, irgendwelche Beispiele dafür zu finden. Ich schaffte es, die Daten von Pandas nach this thread zu konvertieren, aber ich kann meinen Kopf nicht (buchstäblich) um die Y-Achse oder Theta wickeln. Dies istPolar Diagramm der jährlichen Daten mit Matplolib

, wie weit ich bekam:

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

times = pd.date_range("01/01/2016", "12/31/2016") 
rand_nums = np.random.rand(len(times),1) 
df = pd.DataFrame(index=times, data=rand_nums, columns=['A']) 

ax = plt.subplot(projection='polar') 
ax.set_theta_direction(-1) 
ax.set_theta_zero_location("N") 
ax.plot(mdates.date2num(df.index.to_pydatetime()), df['A']) 
plt.show() 

, die mir gibt this plot

den Datumsbereich reduzieren zu verstehen, was auf
times = pd.date_range("01/01/2016", "01/05/2016") wird ich this plot

entnehme ich, dass die Der Anfang der Serie ist zwischen 90 und 135, aber wie kann ich das "neu zuordnen", so dass mein Jahr-Datumsbereich am nördlichen Ursprung beginnt und endet?

Antwort

3

Der Winkelbereich des polaren Plots erstreckt sich über einen vollen Kreis in Radianten, d.h. [0, 2π]. Man müsste also den Datumsbereich auf den vollen Kreis normalisieren.

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

times = pd.date_range("01/01/2016", "12/31/2016") 
rand_nums = np.random.rand(len(times),1) 
df = pd.DataFrame(index=times, data=rand_nums, columns=['A']) 

ax = plt.subplot(projection='polar') 
ax.set_theta_direction(-1) 
ax.set_theta_zero_location("N") 

t = mdates.date2num(df.index.to_pydatetime()) 
y = df['A'] 
tnorm = (t-t.min())/(t.max()-t.min())*2.*np.pi 
ax.fill_between(tnorm,y ,0, alpha=0.4) 
ax.plot(tnorm,y , linewidth=0.8) 
plt.show() 

enter image description here

+0

erstaunlich, danke! –

+0

Ich tat es vorher, aber es hieß, ich hätte nicht genug Karma, um es zu zählen! Ich habe jetzt etwas verdient. Vielleicht kann ich Bilder in meiner nächsten Frage verwenden. –

Verwandte Themen