利用Python繪制多種風(fēng)玫瑰圖
前言
風(fēng)玫瑰是由氣象學(xué)家用于給出如何風(fēng)速和風(fēng)向在特定位置通常分布的簡(jiǎn)明視圖的圖形工具。它也可以用來(lái)描述空氣質(zhì)量污染源。風(fēng)玫瑰工具使用Matplotlib作為后端。
安裝方式直接使用:
pip install windrose
導(dǎo)入模塊
import pandas as pd import numpy as np from matplotlib import pyplot as plt import matplotlib.cm as cm from math import pi import windrose from windrose import WindroseAxes, WindAxes, plot_windrose from mpl_toolkits.axes_grid1.inset_locator import inset_axes import cartopy.crs as ccrs import cartopy.io.img_tiles as cimgt
讀取數(shù)據(jù)
df = pd.read_csv("./sample_wind_poitiers.csv", parse_dates=['Timestamp'])
df = df.set_index('Timestamp')計(jì)算風(fēng)速的u、v分量
df['speed_x'] = df['speed'] * np.sin(df['direction'] * pi / 180.0) df['speed_y'] = df['speed'] * np.cos(df['direction'] * pi / 180.0)
uv風(fēng)速散點(diǎn)圖(含透明度)
fig, ax = plt.subplots(figsize=(8, 8), dpi=80)
x0, x1 = ax.get_xlim()
y0, y1 = ax.get_ylim()
ax.set_aspect(abs(x1-x0)/abs(y1-y0))
ax.set_aspect('equal')
ax.scatter(df['speed_x'], df['speed_y'], alpha=0.25)
df.plot(kind='scatter', x='speed_x', y='speed_y', alpha=0.05, ax=ax)
Vw = 80
ax.set_xlim([-Vw, Vw])
ax.set_ylim([-Vw, Vw])
風(fēng)玫瑰圖(多種形式)
ax = WindroseAxes.from_ax() ax.bar(df.direction.values, df.speed.values, bins=np.arange(0.01,10,1), cmap=cm.hot, lw=3) ax.set_legend()

ax = WindroseAxes.from_ax() ax.box(df.direction.values, df.speed.values, bins=np.arange(0.01,10,1), cmap=cm.hot, lw=3) ax.set_legend()

plot_windrose(df, kind='contour', bins=np.arange(0.01,8,1), cmap=cm.hot, lw=3)

繪制特定月份風(fēng)玫瑰圖
def plot_month(df, t_year_month, *args, **kwargs):
by = 'year_month'
df[by] = df.index.map(lambda dt: (dt.year, dt.month))
df_month = df[df[by] == t_year_month]
ax = plot_windrose(df_month, *args, **kwargs)
return ax
plot_month(df, (2014, 7), kind='contour', bins=np.arange(0, 10, 1), cmap=cm.hot)
plot_month(df, (2014, 8), kind='contour', bins=np.arange(0, 10, 1), cmap=cm.hot)

plot_month(df, (2014, 9), kind='contour', bins=np.arange(0, 10, 1), cmap=cm.hot)

繪制風(fēng)速頻率直方圖
bins = np.arange(0,30+1,1) bins = bins[1:] plot_windrose(df, kind='pdf', bins=np.arange(0.01,30,1),normed=True)
在地圖上繪制風(fēng)玫瑰圖
proj = ccrs.PlateCarree()
fig = plt.figure(figsize=(12, 6))
minlon, maxlon, minlat, maxlat = (6.5, 7.0, 45.85, 46.05)
main_ax = fig.add_subplot(1, 1, 1, projection=proj)
main_ax.set_extent([minlon, maxlon, minlat, maxlat], crs=proj)
main_ax.gridlines(draw_labels=True)
main_ax.add_wms(wms='http://vmap0.tiles.osgeo.org/wms/vmap0',layers=['basic'])
cham_lon, cham_lat = (6.8599, 45.9259)
passy_lon, passy_lat = (6.7, 45.9159)
wrax_cham = inset_axes(main_ax,
width=1,
height=1,
loc='center',
bbox_to_anchor=(cham_lon, cham_lat),
bbox_transform=main_ax.transData,
axes_class=windrose.WindroseAxes,
height_deg = 0.1
wrax_passy = inset_axes(main_ax,
width="100%",
height="100%",
bbox_to_anchor=(passy_lon-height_deg/2, passy_lat-height_deg/2, height_deg, height_deg),
bbox_transform=main_ax.transData,
axes_class=windrose.WindroseAxes,
)
wrax_cham.bar(df.direction.values, df.speed.values,bins=np.arange(0.01,10,1), lw=3)
wrax_passy.bar(df.direction.values, df.speed.values,bins=np.arange(0.01,10,1), lw=3)
for ax in [wrax_cham, wrax_passy]:
ax.tick_params(labelleft=False, labelbottom=False)
最后:
這樣繪制出來(lái)的風(fēng)玫瑰看起來(lái)還是很漂亮的,并且也能夠大大提高工作效率,對(duì)于那些科研人員是很有幫助的。代碼以及圖片效果就放在上面了。
相關(guān)文章
淺析Python pandas模塊輸出每行中間省略號(hào)問題
這篇文章主要介紹Python pandas模塊輸出每行中間省略號(hào)問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
Python AutoCAD 系統(tǒng)設(shè)置的實(shí)現(xiàn)方法
這篇文章主要介紹了Python AutoCAD 系統(tǒng)設(shè)置的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
JSON文件及Python對(duì)JSON文件的讀寫操作
JSON和XML都是互聯(lián)網(wǎng)上數(shù)據(jù)交換的主要載體。這篇文章主要介紹了JSON文件及Python對(duì)JSON文件的讀寫操作,需要的朋友可以參考下2018-10-10
python搭建服務(wù)器實(shí)現(xiàn)兩個(gè)Android客戶端間收發(fā)消息
這篇文章主要為大家詳細(xì)介紹了python搭建服務(wù)器實(shí)現(xiàn)兩個(gè)Android客戶端間收發(fā)消息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
ROS1?rosbag的詳細(xì)使用并且使用python合并bag包的方法
這篇文章主要介紹了ROS1?rosbag的詳細(xì)使用,并且使用python來(lái)合并bag包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
Python利用sqlacodegen自動(dòng)生成ORM實(shí)體類示例
這篇文章主要介紹了Python利用sqlacodegen自動(dòng)生成ORM實(shí)體類,結(jié)合實(shí)例形式分析了Python sqlacodegen安裝技巧ORM實(shí)體類相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-06-06

