首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >季节WindRose子图

季节WindRose子图
EN

Stack Overflow用户
提问于 2021-09-02 04:07:53
回答 1查看 316关注 0票数 1

我正试图在同一个情节中为一年中的四季制作WindRoses。我试着遵循matplotlib中Windrose的子图的方法,但是这个方法对我没有用。

我还尝试了demo.html中的以下内容:(索引采用DateTime格式)。

代码语言:javascript
复制
df = df.between_time('8:00', '21:00') #day
#df = df.between_time() #night
spring = df[~df.index.month.isin([1,2,6,7,8,9,10,11,12])] #spring
summer = df[~df.index.month.isin([1,2,3,4,5,9,10,11,12])] #summer
fall = df[~df.index.month.isin([1,2,3,4,5,6,7,8,12])] #fall
winter = df[~df.index.month.isin([3,4,5,6,7,8,9,10,11])] #winter


#sonny bono

x = [spring.ws_5408,summer.ws_5408,fall.ws_5408,winter.ws_5408]
y = [spring.dir_5408,summer.dir_5408,fall.dir_5408,winter.dir_5408]
ws1 = spring.ws_5408
wd1 = spring.dir_5408
ws2 = summer.ws_5408
wd2 = summer.dir_5408
ws3 = fall.ws_5408
wd3 = fall.dir_5408
ws4 = winter.ws_5408
wd4 = winter.dir_5408
#fig = 'SonnyBono_rose.png'

ax = WindroseAxes.from_ax()
fig, ax = plt.subplots(2, 2)
ax[0, 0].bar(ws1, wd1, normed=True, opening=0.8, edgecolor='white', bins=np.arange(0, 15, 3),cmap=cm.rainbow, nsector=20)
ax[0, 0].set_title('Spring')
ax[0, 1].bar(ws2, wd2, normed=True, opening=0.8, edgecolor='white', bins=np.arange(0, 15, 3),cmap=cm.rainbow, nsector=20)
ax[0, 1].set_title('Summer')
ax[1, 0].bar(ws3, wd3, normed=True, opening=0.8, edgecolor='white', bins=np.arange(0, 15, 3),cmap=cm.rainbow, nsector=20)
ax[1, 0].set_title('Fall')
ax[1, 1].bar(ws4, wd4, normed=True, opening=0.8, edgecolor='white', bins=np.arange(0, 15, 3),cmap=cm.rainbow, nsector=20)
ax[1, 1].set_title('Winter')
ax.set_legend(decimal_places=1, units='m/s',fontsize='x-large', loc='best')

我收到一条错误消息,上面写着AttributeError: 'Rectangle' object has no property 'normed'。这段代码也没有给我一个子图中的四朵风玫瑰,而是输出了四个空白的散点图。我不知道该怎么办。我的数据可以在以下链接上找到:XTHfl61Ngp7UiWAD 16/view?usp=共享

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-02 14:45:19

我设法重复了你的问题。在接下来的问题中,请记住@mozway关于mcve的建议。

准备数据

我在本地下载了你的工作方向的数据。

代码语言:javascript
复制
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.cm as cm
import windrose 


df = pd.read_csv("allregions_wind_hourly.csv")

# I keep only the columns we are going to use
# you can check with df.memory_usage(deep=True).sum()/1024**2
# how much RAM is your data using
cols_to_keep = ["date", "ws_5408", "dir_5408"]
df = df[cols_to_keep]

# Convert to datetime and extract season
df["date"] = df["date"].astype("M8")
df["season"] = df["date"].dt.month%12 //3 +1

season_dict = {1: "winter", 2: "spring", 
               3: "summer", 4: "autumn"}
df["season"] = df["season"].map(season_dict)
# Filter
df = df.set_index("date")
df = df.between_time('8:00', '21:00') #day

关于季节,我使用了这个回答

绘图

代码语言:javascript
复制
seasons = [v for k,v in season_dict.items()]
bins=np.arange(0, 15, 3)
nrows, ncols = 2, 2
fig = plt.figure(figsize=(15, 15))
# plt.subplots_adjust(hspace=0.5)
fig.tight_layout()
for i, season in enumerate(seasons):
    d =  df[df["season"].eq(season)].reset_index(drop=True)
    ax = fig.add_subplot(nrows, ncols, i + 1, projection="windrose")
    ax.set_title(season.capitalize(),fontsize=14, weight='bold')
    ax.bar(d["dir_5408"], d["ws_5408"],
           normed=True, opening=0.8,
           bins=bins, cmap=cm.rainbow,
           nsector=20)

编辑:,如果您需要一种交互式的情节,您可以考虑使用圆滑地。这里是温卓斯的一个例子

EDIT2:如果您真的想要共享数据,您应该考虑将已清除的数据保存到parquet并推送到github帐户并共享链接,以便您可以从木星直接读取该链接。清洁的数据在地板上,它是约69倍,比你原来的csv。最后,这里您可以找到几个使用windrose的例子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69024042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档