使用 matplotlib 的年度数据极坐标图

Polar chart of yearly data with matplolib

我试图在 matplotlib 中将一整年的数据绘制为极坐标图,但无法找到这方面的任何示例。我设法根据 从 pandas 转换日期,但我无法(从字面上)绕过 y 轴或 theta。

这是我的进展:

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

这给了我这个情节:

缩小日期范围以了解正在发生的事情
times = pd.date_range("01/01/2016", "01/05/2016") 我得到这个情节:

我知道系列的开始是在 90 到 135 之间,但是我怎样才能 'remap' 这样我的年份日期范围开始和结束在北原点?

极坐标图的角度范围在整个弧度圆上,即[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()