bar and plot on polar(极坐标上的柱状图和线图,也称风向玫瑰图)

本来想画个简单一点的,但画出来的看起来很丑,如果使用windrose又很麻烦(目标只使用Matplotlib画常见的数据可视化图表,目前不打算使用第三方的)。
研究了下各参数的用法,效果如下,保存的博客里,以备后续查阅。
上图。
bar on polar
在这里插入图片描述
plot on polar(没有达到windrose demo的效果,原因没弄明白)
在这里插入图片描述
在这里插入图片描述
再上代码。
bar on polar

def drawBarOnPolar():
    a=[i*pi/18 for i in range(1,37)]
    b =sorted([i for i in range(1,37)],reverse=True)
    width = np.pi / 24
    cs = [plt.cm.cool(i / float(36)) for i in range(36)]
    fig,ax=plt.subplots(figsize=(9,9))
    ax = plt.subplot(111, polar=True)
    # bar图使用polar投影时,在原bar的基础上要加上pi,得到的才是圆中的位置
    ax.bar(a,b,width=pi/18, bottom=0.0,alpha=0.4,align='edge',color=cs,edgecolor='white')
    ax.set_xlim(0,pi*2)
    ax.set_ylim(0,36)
    ax.grid(False,color='black',linestyle=':',linewidth=0.5)
    plt.thetagrids([i*180/pi for i in a],b)
    # plt.axis('off')
    plt.subplots_adjust(0.05,0.05,0.95,0.95)
    plt.savefig('pieonpolar.jpg')

plot on polar

def drawRose():
    fig, ax = plt.subplots(figsize=(9, 9))
    ax = plt.subplot(111, polar=True)
    rl=[((i-1)*10+1,i*10) for i in range(1,6)]
    # cs=[plt.cm.afmhot(i/5) for i in range(5)]
    cs=sorted(['yellow','orange','red','grey','k'],reverse=True)
    for i,k in enumerate(zip(rl,cs)):
        a = [i * pi / 5 for i in range(1, 11)]
        a.append(a[0])#增加第一个元素以确保线形成圆
        b=[i+k[0][0] for i in [9,6,8,4,9,7,9,1,6,7]]
        b.append(b[0])
        ax.plot(a, b,color=k[1],alpha=0.5)
        ax.fill(a, b, facecolor=k[1],alpha=0.4)
        ax.grid(False, color='black', linestyle=':', linewidth=1)
        plt.thetagrids([i * 180 / pi for i in a])
        plt.axis('off')
    plt.subplots_adjust(0.05, 0.05, 0.95, 0.95)
    plt.savefig('rosewithgrid.jpg')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值