【问题标题】:Polar chart of yearly data with matplolib使用 matplotlib 绘制年度数据的极坐标图
【发布时间】:2017-09-29 23:30:15
【问题描述】:

我正在尝试在 matplotlib 中将一整年的数据绘制为极坐标图,但无法找到任何此类示例。我设法根据this thread 转换了 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 之间,但我怎样才能“重新映射”它,以便我的年份日期范围在北原点开始和结束?

【问题讨论】:

    标签: python matplotlib time-series polar-coordinates


    【解决方案1】:

    极坐标图的角度范围以辐射线为单位,即[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()
    

    【讨论】:

    • 我以前做过,但它说我没有足够的业力来计算!我现在好像赚了一些。也许我可以在下一个问题中使用图片。
    猜你喜欢
    • 1970-01-01
    • 2019-07-07
    • 2015-09-12
    • 2022-01-23
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多