爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 16911|回复: 12

[源代码] 分享一个污染玫瑰图的代码,提问极坐标轴更改方法?

[复制链接]

新浪微博达人勋

发表于 2020-6-16 13:33:40 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
下图是根据逐小时风向风速和PM2.5浓度画出的污染玫瑰图,可惜极坐标轴的标签是角度,想问下大家怎么修改成方向的字母?
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.core.pylabtools import figsize
plt.rcParams['savefig.dpi'] = 200
plt.rcParams['figure.dpi'] = 200

file = r'.../pollutionrose.xlsx'
data = pd.read_excel(file, usecols=['DATE', 'WD', 'WS', 'PM2.5'], index_col=0).iloc[:72, :]
data
data['WD'] = np.radians(data['WD'])
v = data['WS']
speed = np.linspace(v.min(), v.max(), endpoint=True, num=16)
deg = np.linspace(0, 2*np.pi, endpoint=True, num=32)
def maker(s, sequence):
     for i, val in enumerate(sequence):
        if s <= sequence[i+1]:
            return val
d = data['WD']
data['WS'] = v.apply(maker, sequence=speed)
data['WD'] = d.apply(maker, sequence=deg)
data.head()
data['PM2.5'] = data['PM2.5'].astype(float)
dt = data.pivot_table(values='PM2.5', index='WS', columns='WD', aggfunc=np.mean)
dt.fillna(0, inplace=True)
dt = dt.reindex(index=speed, columns=deg, fill_value=0)
dt.head(6)
theta, r = np.meshgrid(deg, speed)
ax = plt.subplot(projection='polar')
ax.set_theta_zero_location("N")
ax.set_theta_direction('clockwise')
pos = ax.contourf(theta, r, dt.to_numpy(), cmap='jet')
cb = plt.colorbar(pos, ax=ax,pad=0.1)
cb.set_label("PM2.5 μg&#8901;m^(-3)",size=8)
cb.ax.tick_params(labelsize=8)
plt.title("King's Park(0716-0718)",y=1,size=10)
plt.show()

KS01.png

评分

参与人数 1金钱 +6 收起 理由
火_旦 + 6 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-6-16 21:24:25 | 显示全部楼层
本帖最后由 Masterpiece 于 2020-6-16 21:26 编辑

polar chart外圈这个是labels用set_xticks和set_xticklabels去控制。另外matplotlib中有关text的一切事物都支持LATEX公式。

  1. import numpy as np
  2. import matplotlib.pyplot as plt

  3. fig,axl = plt.subplots(1,2, subplot_kw={'projection':'polar'},figsize=(9,5))
  4. ax=axl[0]
  5. ax.set_theta_zero_location("N")
  6. ax.set_theta_direction('clockwise')

  7. ax.set_xticks([(i/4)*np.pi for i in range(8)])
  8. ax.set_xticklabels(['N','NE','E','SE','S','SW','W','NW'],fontdict={'weight':'bold','size':15,'color':'b'})
  9. ax.set_rmax(3)
  10. ax.set_rticks([])

  11. ax.set_title(r"PM2.5 $\mu g \cdot m^{-3}$",size=13, va='bottom',pad=20)

  12. ax=axl[1]
  13. ax.set_theta_zero_location("N")
  14. ax.set_theta_direction('clockwise')

  15. ax.set_xticks([(i/4)*np.pi for i in range(8)])
  16. ax.set_xticklabels(['北','东北','东','东南','南','西南','西','西北'],fontdict={'family':'SimHei','size':15,'color':'red'})
  17. ax.set_rmax(3)

  18. ax.set_rticks([])
  19. ax.set_title(r"Article style: PM2.5 $\rm \mu g \cdot m^{-3}$",size=13, va='bottom',pad=20)

  20. plt.savefig('polar.png',dpi=200,bbox_inches='tight')

  21. plt.show()
复制代码
polar.png


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-6-17 08:33:36 | 显示全部楼层
楼主这个测试的数据能否也发个附件,谢谢啦
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-6-17 10:19:37 | 显示全部楼层
Masterpiece 发表于 2020-6-16 21:24
polar chart外圈这个是labels用set_xticks和set_xticklabels去控制。另外matplotlib中有关text的一切事物都 ...

已经成功实现了,谢谢你了~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-6-17 10:23:49 | 显示全部楼层
sihaike 发表于 2020-6-17 08:33
楼主这个测试的数据能否也发个附件,谢谢啦

抱歉啊,这是非公开数据,不过可以告诉你数据的格式,就是xlsx格式,一共四列,分别是日期,风向,风速和PM2.5浓度。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-6-24 16:24:26 | 显示全部楼层
楼主,请教一个问题,为啥运行的时候,一直显示风向出问题呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-6-26 18:19:21 | 显示全部楼层
123肆 发表于 2020-6-24 16:24
楼主,请教一个问题,为啥运行的时候,一直显示风向出问题呢

风向的数据是0-360度,不是弧度制的,会不会弄反了?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-6-28 14:23:57 | 显示全部楼层
CynthiaLee 发表于 2020-6-26 18:19
风向的数据是0-360度,不是弧度制的,会不会弄反了?

谢谢楼主,已经解决啦
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-7-25 10:52:17 | 显示全部楼层
请问这是用什么软件画的呀?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-10-28 22:00:36 | 显示全部楼层
赞一下,不错{:5_213:}{:5_213:}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表