2017-05-02 9 views
3

matplotlib의 극좌표로 일년 내내 데이터를 표시하려고하고 있는데,이 예제를 찾는 데 어려움이 있습니다. 나는 그럭저럭 this thread에 의하면 팬더로부터의 날짜를 바꿀 수 있었다. 그러나 나는 y 축 (또는 세타) 주위에 나의 머리를 (자연히) 감쌀 수 없다.matplolib로 연간 데이터의 극좌표 도표

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() 

나는이 것을 수집 this plot

을 얻을
times = pd.date_range("01/01/2016", "01/05/2016")에 무슨 일이 일어나고 있는지 이해하는 날짜 범위를 감소 this plot

나에게주는 :

이것은 내가 가진 얼마나 멀리입니다 시리즈의 시작은 90에서 135 사이이지만, 어떻게 다시 매핑하여 내년 날짜 범위가 북쪽 기점에서 시작되고 완료되도록 할 수 있습니까?

답변

3

극좌표 플롯의 각 범위는 방사체의 전체 원 범위에 걸쳐 분포하며, 즉 [0, 2π]입니다. 따라서 날짜 범위를 전체 원으로 정규화해야합니다.

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

놀라운, 감사합니다! –

+0

나는 전에했다. 그러나 나는 그것이 세는 데 충분한 운명이 없다고 말했다! 나는 지금 어떤 것을 얻은 것 같다. 어쩌면 다음 질문에서 이미지를 사용할 수 있습니다. –