使用python在r"D:\李杰航\课设.xls"路径下的文件用水平直方图绘制出每一年哪一个月连续降水最长的天数以及从什么时候开始到什么时候结束
时间: 2024-05-13 09:15:34 浏览: 57
首先,我们需要读取Excel文件中的数据,并将其转换为我们能够使用的格式。这里我们使用`pandas`库来读取Excel文件,并将数据转换为DataFrame。
```python
import pandas as pd
# 读取Excel文件
data = pd.read_excel(r"D:\李杰航\课设.xls")
# 查看数据
print(data.head())
```
接下来,我们需要找出每年哪个月连续降水最长,并计算最长连续降水天数。我们可以使用一个函数来实现这个功能,函数的输入是一个年份和一个月份列表,输出是该年份哪一个月连续降水最长以及最长连续降水天数。
```python
def find_max_rain_days(year, months):
max_days = 0
max_month = None
# 遍历所有月份
for month in months:
# 获取该月份的降水数据
rain = data[(data['年'] == year) & (data['月'] == month)]['降水量'].tolist()
# 将缺失值填充为0
rain = [0 if pd.isna(x) else x for x in rain]
# 计算连续降水天数
consecutive_days = 0
max_consecutive_days = 0
for i in range(len(rain)):
if rain[i] > 0:
consecutive_days += 1
if consecutive_days > max_consecutive_days:
max_consecutive_days = consecutive_days
start_date = f"{year}/{month}/{i + 1 - consecutive_days}"
end_date = f"{year}/{month}/{i}"
else:
consecutive_days = 0
# 更新最长连续降水天数和月份
if max_consecutive_days > max_days:
max_days = max_consecutive_days
max_month = month
return max_month, max_days, start_date, end_date
```
最后,我们可以使用`matplotlib`库来绘制水平直方图。代码如下:
```python
import matplotlib.pyplot as plt
# 获取所有年份和月份
years = data['年'].unique().tolist()
months = data['月'].unique().tolist()
# 绘制水平直方图
fig, ax = plt.subplots(figsize=(10, 5))
for i, year in enumerate(years):
# 找出每年哪一个月连续降水最长
max_month, max_days, start_date, end_date = find_max_rain_days(year, months)
# 在图中添加文本
ax.text(max_days + 10, i, f"{year}年{max_month}月连续降水最长{max_days}天,从{start_date}到{end_date}", va='center', fontsize=8)
# 绘制水平直方图
ax.barh(i, max_days, height=0.5)
# 设置图形标题和轴标签
ax.set_title('每一年哪一个月连续降水最长的天数以及从什么时候开始到什么时候结束')
ax.set_xlabel('连续降水天数')
ax.set_ylabel('年份')
# 调整坐标轴范围和标签位置
ax.set_xlim(0, 120)
ax.xaxis.set_ticks_position('top')
ax.xaxis.set_label_position('top')
# 显示图形
plt.show()
```
运行上述代码,就可以得到每一年哪一个月连续降水最长的天数以及从什么时候开始到什么时候结束的水平直方图。
阅读全文