使用matplotlib绘制每月的最高温度

来源:互联网 发布:阿里云服务器转让 编辑:程序博客网 时间:2024/05/23 20:39
# ========== Python3 + Jupyter ========== ## 导入所需的第三方包import datetimeimport calendarimport requestsfrom bs4 import BeautifulSoupimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns# 采集数据# 上海2017年9月份历史气温数据url = 'http://lishi.tianqi.com/huludao/201710.html'plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'plt.rcParams['axes.unicode_minus'] = False# 发送爬虫请求response = requests.get(url).text# 解析源代码soup = BeautifulSoup(response, 'html.parser')# 根据HTML标记语言,查询目标标记下的数据datas = soup.findAll('div',{'class':'tqtongji2'})[0].findAll('ul')[1:]# 抓取日期数据date = [i.findAll('li')[0].text for i in datas]# 抓取最高温数据low = [i.findAll('li')[1].text for i in datas]# 创建数据框df = pd.DataFrame({'date':date, 'low':low})# 变量类型"""2"""# 将date变量转换为日期类型df.date = pd.to_datetime(df.date)# 将high变量转换成数值型df.low = df.low.astype('int')# 数据处理# 由日期型数据衍生出weekdaydf['weekday'] = df.date.apply(pd.datetime.weekday)# 由日期型数据计算week_of_month,即当前日期在本月中是第几周# 由于没有现成的函数,这里自定义一个函数来计算week_of_monthdef week_of_month(tgtdate):    # 由日期型参数tgtdate计算该月的天数    days_this_month = calendar.mdays[tgtdate.month]    # 通过循环当月的所有天数,找出第二周的第一个日期    for i in range(1, days_this_month + 1):        d = datetime.datetime(tgtdate.year, tgtdate.month, i)        if d.day - d.weekday() > 0:            startdate = d            break    # 返回日期所属月份的第一周    return (tgtdate - startdate).days //7 + 1df['week_of_month'] = df.date.apply(week_of_month)df.head()"""4"""# 通过透视图函数形成绘图数据target = pd.pivot_table(data = df.iloc[:,1:],values = 'low',                        index = 'week_of_month', columns = 'weekday')# 绘图ax = sns.heatmap(target, # 指定绘图数据                 cmap=plt.cm.Reds, # 指定填充色                 linewidths=.1, # 设置每个单元方块的间隔                 annot=True # 显示数值                )# 添加x轴刻度标签(加0.5是为了让刻度标签居中显示)plt.xticks(np.arange(7)+0.5,['周一','周二','周三','周四','周五','周六','周日'])# 可以将刻度标签置于顶部显示# ax.xaxis.tick_top()# 添加y轴刻度标签plt.yticks(np.arange(5)+0.5,['第一周','第二周','第三周','第四周','第五周'])# 旋转y刻度0度,即水平显示plt.yticks(rotation = 0)# 设置标题和坐标轴标签ax.set_title('葫芦岛市2017年10月份每日最高气温分布图')ax.set_xlabel('')ax.set_ylabel('')# 显示图形plt.show()