最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Python繪制多種風(fēng)玫瑰圖

 更新時(shí)間:2022年05月08日 10:04:14   作者:螞蟻ailing  
這篇文章主要介紹了利用Python繪制多種風(fēng)玫瑰圖,風(fēng)玫瑰是由氣象學(xué)家用于給出如何風(fēng)速和風(fēng)向在特定位置通常分布的簡明視圖的圖形工具,下文繪制實(shí)現(xiàn)詳情,需要的小伙伴可以參考一下

前言

風(fēng)玫瑰是由氣象學(xué)家用于給出如何風(fēng)速和風(fēng)向在特定位置通常分布的簡明視圖的圖形工具。它也可以用來描述空氣質(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)

最后:

這樣繪制出來的風(fēng)玫瑰看起來還是很漂亮的,并且也能夠大大提高工作效率,對(duì)于那些科研人員是很有幫助的。代碼以及圖片效果就放在上面了。

相關(guān)文章

最新評(píng)論

吉林省| 桂东县| 神池县| 浦北县| 嘉兴市| 建平县| 阿合奇县| 郸城县| 大厂| 平罗县| 习水县| 新津县| 平原县| 惠州市| 华蓥市| 桑植县| 丽水市| 皮山县| 梅州市| 满洲里市| 黔南| 佛山市| 新巴尔虎左旗| 乐都县| 巴楚县| 宜城市| 井冈山市| 衡水市| 京山县| 木里| 渑池县| 大埔区| 浙江省| 蓝山县| 和田市| 嘉定区| 平顶山市| 华池县| 潢川县| 平昌县| 尉犁县|