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
45 lines
1.6 KiB
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("已生成每月天气柱状图和每日气温折线图的时间轴可视化") |