我正试图在同一个情节中为一年中的四季制作WindRoses。我试着遵循matplotlib中Windrose的子图的方法,但是这个方法对我没有用。
我还尝试了demo.html中的以下内容:(索引采用DateTime格式)。
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=共享
发布于 2021-09-02 14:45:19
我设法重复了你的问题。在接下来的问题中,请记住@mozway关于mcve的建议。
准备数据
我在本地下载了你的工作方向的数据。
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关于季节,我使用了这个回答。
绘图
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的例子。
https://stackoverflow.com/questions/69024042
复制相似问题