You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.6 KiB

10 months ago
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Grid, Timeline
# 读取CSV文件
df = pd.read_csv('weather.csv', encoding='utf-8')
# 将日期列转换为 datetime 类型
df['日期'] = pd.to_datetime(df['日期'])
# 新增月份列
df['month'] = df['日期'].dt.month
# 创建 Timeline 实例
timeline = Timeline()
# 创建每月天气柱状图和气温折线图
for month in df['month'].unique():
# 过滤出当前月份的数据
data = df[df['month'] == month]
# 创建柱状图
bar = Bar()
bar.add_xaxis(data['天气'].value_counts().index.tolist())
bar.add_yaxis('', data['天气'].value_counts().tolist(), category_gap="50%")
bar.set_global_opts(title_opts=opts.TitleOpts(title=f'桂林2023年{month}月天气变化'))
# 创建折线图
line = Line()
line.add_xaxis(data['日期'].dt.strftime('%Y-%m-%d').tolist())
line.add_yaxis('最高气温', data['最高气温'].tolist())
line.add_yaxis('最低气温', data['最低气温'].tolist())
# 创建 Grid 组件,将柱状图和折线图放在同一个 Grid 中
grid = Grid(init_opts=opts.InitOpts(theme="light"))
grid.add(bar, grid_opts=opts.GridOpts(pos_left="5%", pos_right="25%", pos_top="10%", pos_bottom="55%"))
grid.add(line, grid_opts=opts.GridOpts(pos_left="5%", pos_right="25%", pos_top="55%", pos_bottom="15%"))
# 将 Grid 添加到 Timeline 中
timeline.add(grid, f'{month}')
# 渲染生成 HTML 文件
timeline.render('weather_timeline.html')
print("已生成每月天气柱状图和每日气温折线图的时间轴可视化")