gpt4 book ai didi

python - 如何优化我的代码,以便能够使用循环在子图中绘制直方图?

转载 作者:行者123 更新时间:2023-12-04 09:54:52 27 4
gpt4 key购买 nike

这是我迄今为止所做的。基本上,我想创建 4 个子图来绘制 4 个单独的直方图,但我发现我一遍又一遍地重复代码。但是,我不知道如何使用循环来优化代码。我还在底部插入了一个图像来显示我想要实现的目标。

这是我用过的数据集的链接:https://data.gov.sg/dataset/weekly-number-of-dengue-and-dengue-haemorrhagic-fever-cases

import pandas as pd
import matplotlib.pyplot as plt

df_dengue_and_dhf_cases = pd.read_csv('weekly-number-of-dengue-and-dengue-haemorrhagic-fever-cases.csv',index_col=0)

df_dengue_and_dhf_2018 = df_dengue_and_dhf_cases.loc[2018].loc[:,"type_dengue":"number"]

df_dengue_and_dhf_2018 = df_dengue_and_dhf_2018.set_index("type_dengue")

df_dengue_cases_2018 = df_dengue_and_dhf_2018.loc["Dengue"].dropna()

df_dengue_and_dhf_2017 = df_dengue_and_dhf_cases.loc[2017].loc[:,"type_dengue":"number"]

df_dengue_and_dhf_2017 = df_dengue_and_dhf_2017.set_index("type_dengue")

df_dengue_cases_2017 = df_dengue_and_dhf_2017.loc["Dengue"].dropna()

df_dengue_and_dhf_2016 = df_dengue_and_dhf_cases.loc[2016].loc[:,"type_dengue":"number"]

df_dengue_and_dhf_2016 = df_dengue_and_dhf_2016.set_index("type_dengue")

df_dengue_cases_2016 = df_dengue_and_dhf_2016.loc["Dengue"].dropna()

df_dengue_and_dhf_2015 = df_dengue_and_dhf_cases.loc[2015].loc[:,"type_dengue":"number"]

df_dengue_and_dhf_2015 = df_dengue_and_dhf_2015.set_index("type_dengue")

df_dengue_cases_2015 = df_dengue_and_dhf_2015.loc["Dengue"].dropna()

fig,ax = plt.subplots(2,2,figsize=(16,8),sharey=True)

ax[0,0].hist(df_dengue_cases_2018.T,label="Dengue Cases in 2018",histtype="bar",color="crimson")

ax[0,1].hist(df_dengue_cases_2017.T,label="Dengue Cases in 2017",histtype="bar",color="darkblue")

ax[1,0].hist(df_dengue_cases_2016.T,label="Dengue Cases in 2016",histtype="bar",color="rebeccapurple")

ax[1,1].hist(df_dengue_cases_2015.T,label="Dengue Cases in 2015",histtype="bar",color="darkgreen")

ax[0,0].set_xlabel("Number of Dengue Cases",fontsize=13,fontweight="bold")

ax[0,0].set_ylabel("Number of Weeks",fontsize=13,fontweight="bold")

ax[0,0].set_title("Distribution of the Weekly Number of Dengue Cases in 2018",fontsize=14,fontweight="bold")

ax[0,1].set_xlabel("Number of Dengue Cases",fontsize=13,fontweight="bold")

ax[0,1].set_title("Distribution of the Weekly Number of Dengue Cases in 2017",fontsize=14,fontweight="bold")

ax[1,0].set_xlabel("Number of Dengue Cases",fontsize=13,fontweight="bold")

ax[1,0].set_ylabel("Number of Weeks",fontsize=13,fontweight="bold")

ax[1,0].set_title("Distribution of the Weekly Number of Dengue Cases in 2016",fontsize=14,fontweight="bold")

ax[1,1].set_xlabel("Number of Dengue Cases",fontsize=13,fontweight="bold")

ax[1,1].set_title("Distribution of the Weekly Number of Dengue Cases in 2015",fontsize=14,fontweight="bold")

ax[0,0].legend()
ax[0,1].legend()
ax[1,0].legend()
ax[1,1].legend()

fig.tight_layout()

plt.show()

Histogram Image

最佳答案

我猜你应该对数据的一个子集做一个直方图,所以首先对数据进行子集化是有意义的:

import pandas as pd
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt

years_ = [2018,2017,2016,2015]

df = pd.read_csv('./weekly-number-of-dengue-and-dengue-haemorrhagic-fever-cases.csv')
df = df[(df.type_dengue=="Dengue") & (df.year.isin(years_))].dropna()

然后我们定义调色板,顺序与 years_ 相同从上面:
pal = ["crimson","darkblue","rebeccapurple","darkgreen"]

我们可以使用seaborn:
g = sns.FacetGrid(df, col="year",sharex=False,col_wrap=2,
palette=pal,hue="year",
col_order=years_,
height=3,aspect=2)
g.map(plt.hist,"number")

enter image description here

我们也可以在 matplotlib 中做到:
fig,ax = plt.subplots(2,2,figsize=(16,8),sharey=True)
ax = ax.flatten()
for i in range(len(years_)):
ax[i].hist(df[df.year==years_[i]].number,
label="Dengue Cases in "+str(years_[i]),histtype="bar",color=pal[i])
ax[i].set_xlabel("Number of Dengue Cases",fontsize=13,fontweight="bold")
ax[i].set_ylabel("Number of Weeks",fontsize=13,fontweight="bold")
ax[i].set_title("Distribution of the Weekly Number of Dengue Cases in "+str(years_[i]),
fontsize=14,fontweight="bold")
ax[i].legend()

fig.tight_layout()
plt.show()

enter image description here

关于python - 如何优化我的代码,以便能够使用循环在子图中绘制直方图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61939099/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com