news 2026/6/25 18:28:03

用真实气象数据来学习python可视化分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用真实气象数据来学习python可视化分析

目录

一、我们为什么要去学习python可视化?

二、为什么用气象数据?

真实项目里怎么更新数据?

三、如何选图:先读表,再想问题

四、matplotlib 基础

四步画图模板

五、八种常用图表详解

5.1 折线图(Line Plot)— 看趋势

5.2 柱状图(Bar Chart)— 做对比

5.3 散点图(Scatter Plot)— 看关系

5.4 直方图(Histogram)— 看分布

5.5 箱线图(Box Plot)— 看分布 + 异常值

5.6 双轴组合图 — 多指标同屏

5.7 饼图(Pie Chart)— 看占比

5.8 热力图(Heatmap)— 看矩阵/强度

六、可视化与机器学习的关系


一、我们为什么要去学习python可视化?

机器学习不只有公式和代码,还需要把数据「画」出来。一张好图胜过千言万语——但前提是:你知道这张图要回答什么问题

本篇用气象数据把八种常用图表练一遍,让你在建模前就能系统做EDA(探索性数据分析)

数据可视化用图形表达数据规律,帮助我们:

  • 探索数据:训练模型前先看分布、缺失、异常
  • 展示结果:向他人解释模型、汇报分析结论
  • 监控业务:网站后台的实时曲线、柱状 KPI

本教程用南京市 2024 年每日气象数据(真实 API 数据)练习matplotlib八种常用图表。

二、为什么用气象数据?

熟悉、能判断对错的数据,后面八种图才有直觉。气温人人懂,画错了你一眼能发现。

我们都知道:生活中天天接触

天气预报、穿衣指数、出行计划——气温、降水人人都懂,看图时容易判断「画得对不对」。

真实项目里怎么更新数据?
场景做法
天气 App / 网站定时调用气象 API(如 Open-Meteo、和风天气),每小时或每天刷新
数据大屏后端拉 API → 存数据库 → 前端 ECharts 轮询展示
本教程已下载 2024 年全年历史数据到 CSV,离线学习,逻辑与线上一致

三、如何选图:先读表,再想问题

画图之前,先对着 CSV 问自己两个个问题——后面选图就不会乱。

你想知道什么我该画什么图
一年里气温怎么变?折线图
哪个月最热/最冷?柱状图
最高温和最低温有关系吗?散点图
气温大多集中在哪一段?直方图
各月气温分布差多少、有无异常天?箱线图
气温和降水能放一张图吗?双轴组合图
晴天多还是雨天多?饼图
12 个月温度强弱一眼看清?热力图

文件:数据集/nanjing_weather_2024.csv

列名含义单位
date日期YYYY-MM-DD
temp_max日最高气温°C
temp_min日最低气温°C
temp_mean日平均气温°C
precipitation_mm日降水量mm
wind_max_kmh日最大风速km/h

加载代码(可视化分析.pyload_data()):

def load_data(path: str = DATA_PATH) -> pd.DataFrame: df = pd.read_csv(path, parse_dates=["date"]) df["month"] = df["date"].dt.month df["day_of_year"] = df["date"].dt.dayofyear return df

四、matplotlib 基础

四步画图模板
import matplotlib.pyplot as plt plt.figure(figsize=(宽, 高)) # 1. 创建画布 plt.plot(x, y) # 2. 画某种图 plt.xlabel("横轴"); plt.ylabel("纵轴"); plt.title("标题") # 3. 标注 plt.savefig("图片/xxx.png") # 4a. 保存 plt.show() # 4b. 弹窗显示

中文显示

plt.rcParams["font.sans-serif"] = ["SimHei", "Microsoft YaHei"] plt.rcParams["axes.unicode_minus"] = False # 负号正常显示

五、八种常用图表详解

每种图:先问什么问题 → 怎么画 → 对应哪张图 → 机器学习里何时用

折线图(整体趋势) → 柱状图(按月对比) → 散点图(两变量关系) → 直方图(单变量分布) → 箱线图(多组分布 + 异常) → 双轴图(不同量纲同屏) → 饼图(占比) → 热力图(矩阵强度)

5.1 折线图(Line Plot)— 看趋势

第一个问题:2024 年南京气温随时间怎么变?

用途:气温随时间变化、股票走势、网站 UV 曲线、训练损失随 epoch 变化——连续/有序数据看趋势的首选。

本教程:2024 年每日平均气温 + 最高最低填充带。

代码(可视化分析.pyplot_line_daily_temp()):

def plot_line_daily_temp(df, filename="01_折线图_日均气温趋势.png"): plt.figure(figsize=(12, 5)) plt.plot(df["date"], df["temp_mean"], color="crimson", linewidth=0.9, label="日均气温") plt.fill_between(df["date"], df["temp_min"], df["temp_max"], alpha=0.15, color="crimson") plt.xlabel("日期") plt.ylabel("气温 (°C)") plt.title(f"{CITY}市 {YEAR} 年每日气温变化(折线图)") plt.legend() plt.grid(True, alpha=0.3) plt.tight_layout() save_and_show(filename)

何时用:X 轴是时间或有序序列,关心「怎么变」。

机器学习里:损失曲线、准确率曲线、学习率调度


5.2 柱状图(Bar Chart)— 做对比

承接 5.1:折线图信息太细;按月聚合后比高低,柱状图更直观。

用途:各月销售额、各城市 PM2.5、班级人数——分类之间比大小

本教程:12 个月的平均气温,颜色随温度冷暖变化(coolwarm色图)。

代码(可视化分析.pyplot_bar_monthly_avg()):

def plot_bar_monthly_avg(df, filename="02_柱状图_月均气温.png"): monthly = df.groupby("month")["temp_mean"].mean() colors = plt.cm.coolwarm((monthly - monthly.min()) / (monthly.max() - monthly.min())) plt.figure(figsize=(10, 5)) plt.bar(MONTH_LABELS, monthly.values, color=colors, edgecolor="gray", linewidth=0.5) plt.xlabel("月份") plt.ylabel("平均气温 (°C)") plt.title(f"{CITY}市 {YEAR} 年各月平均气温(柱状图)") plt.grid(True, alpha=0.3, axis="y") plt.tight_layout() save_and_show(filename)

何时用:X 轴是离散类别(月份、城市、产品)。

机器学习里:各类别样本数量、特征重要性排序、各模型准确率对比。


5.3 散点图(Scatter Plot)— 看关系

承接 5.2:柱状图比的是「汇总后的类别」;散点图看两个数值变量是否相关、有没有离群点。

用途:身高 vs 体重、广告投入 vs 销量、房屋面积 vs 房价——观察两个变量是否相关

本篇:每日最低温 vs 最高温,颜色表示月份。

代码(可视化分析.pyplot_scatter_max_min()):

def plot_scatter_max_min(df, filename="03_散点图_最高与最低气温.png"): plt.figure(figsize=(7, 6)) plt.scatter(df["temp_min"], df["temp_max"], c=df["month"], cmap="coolwarm", s=18, alpha=0.7, edgecolors="none") plt.xlabel("日最低气温 (°C)") plt.ylabel("日最高气温 (°C)") plt.title(f"{CITY}市 {YEAR} 年 最高温 vs 最低温(散点图)") plt.grid(True, alpha=0.3) plt.tight_layout() save_and_show(filename)

何时用:两个数值变量,想看相关性、聚类、离群点。

机器学习里:线性回归前必画特征与标签关系。


5.4 直方图(Histogram)— 看分布

承接 5.3:散点看的是「两个变量」;直方图只看一个变量落在各区间的频率。

用途:成绩分布、用户年龄分布——一个变量落在各区间的频率

本教程:366 天日均气温落在各温度区间的天数。

代码(可视化分析.pyplot_histogram_temp()):

def plot_histogram_temp(df, filename="04_直方图_气温分布.png"): plt.figure(figsize=(8, 5)) plt.hist(df["temp_mean"], bins=20, color="steelblue", edgecolor="white", alpha=0.85) plt.axvline(df["temp_mean"].mean(), color="crimson", linestyle="--", linewidth=2, label=f'年均 {df["temp_mean"].mean():.1f}°C') plt.xlabel("日均气温 (°C)") plt.ylabel("天数") plt.title(f"{CITY}市 {YEAR} 年日均气温分布(直方图)") plt.legend() plt.grid(True, alpha=0.3, axis="y") plt.tight_layout() save_and_show(filename)

何时用:关心「数据集中在哪一段」;机器学习里常用来检查特征分布是否偏态、是否需要标准化。


5.5 箱线图(Box Plot)— 看分布 + 异常值

承接 5.4:直方图是一个整体分布;箱线图适合多组并排比较(这里是 12 个月)。

用途:多组数据对比分布:中位数、四分位、异常点一目了然。

本教程:12 个月各自的日均气温箱线。

代码(可视化分析.pyplot_box_monthly()):

def plot_box_monthly(df, filename="05_箱线图_各月气温分布.png"): data_by_month = [df.loc[df["month"] == m, "temp_mean"].values for m in range(1, 13)] plt.figure(figsize=(11, 5)) bp = plt.boxplot(data_by_month, tick_labels=MONTH_LABELS, patch_artist=True) plt.xlabel("月份") plt.ylabel("日均气温 (°C)") plt.title(f"{CITY}市 {YEAR} 年各月气温分布(箱线图)") plt.grid(True, alpha=0.3, axis="y") plt.tight_layout() save_and_show(filename)

箱线图读法:

部分含义
中间线中位数
箱子25%~75% 分位(IQR)
正常范围
圆点异常值

机器学习里:按类别看特征分布、发现标注异常;数据清洗前常用。


5.6 双轴组合图 — 多指标同屏

承接 5.5:箱线图是「分组对比」;双轴图是「同一时间轴、两种量纲」——气象网站最常见。

用途:气象网站常见:气温折线 + 降水柱状画在同一张图。

代码(可视化分析.pyplot_temp_precipitation()):

def plot_temp_precipitation(df, filename="06_组合图_气温与降水量.png"): fig, ax1 = plt.subplots(figsize=(12, 5)) ax1.plot(df["date"], df["temp_mean"], color="crimson", linewidth=0.9, label="日均气温") ax1.set_xlabel("日期") ax1.set_ylabel("气温 (°C)", color="crimson") ax2 = ax1.twinx() # 创建右轴 ax2.bar(df["date"], df["precipitation_mm"], width=1.0, color="steelblue", alpha=0.35) ax2.set_ylabel("降水量 (mm)", color="steelblue") fig.suptitle(f"{CITY}市 {YEAR} 年 气温与降水量(双轴组合图)") fig.tight_layout() save_and_show(filename)

何时用:两个量纲不同的指标要放在同一时间轴上对比。

机器学习里:同时监控训练损失与验证损失、学习率与梯度范数。


5.7 饼图(Pie Chart)— 看占比

承接 5.6:双轴图仍是时间序列;饼图回答「整体里各部分占多少」。

用途:市场份额、预算分配——部分占整体的比例(类别不宜超过 5~7 个)。

本教程:2024 年上海有降水天数 vs 无降水天数。

代码(可视化分析.pyplot_pie_rainy_days()):

def plot_pie_rainy_days(df, filename="07_饼图_晴雨天天数占比.png"): rainy = (df["precipitation_mm"] > 0).sum() dry = len(df) - rainy plt.figure(figsize=(6, 6)) plt.pie( [dry, rainy], labels=[f"晴天/无降水\n{dry} 天", f"有降水\n{rainy} 天"], autopct="%1.1f%%", colors=["#FFD966", "#6FA8DC"], startangle=90, ) plt.title(f"{CITY}市 {YEAR} 年 晴雨天天数占比(饼图)") plt.tight_layout() save_and_show(filename)

注意:占比类图表也可用条形图替代,饼图适合类别少、强调「整块」的场景。


5.8 热力图(Heatmap)— 看矩阵/强度

承接 5.7:饼图是「两类占比」;热力图适合矩阵数据——颜色深浅表示数值大小。

用途:相关矩阵、日历热力、地理温度网格——颜色深浅表示数值大小

本教程:简化版——12 个月平均气温一行热力条。

代码(可视化分析.pyplot_heatmap_month_day()):

def plot_heatmap_month_day(df, filename="08_热力图_月平均气温.png"): monthly_avg = df.groupby("month")["temp_mean"].mean().values.reshape(1, -1) plt.figure(figsize=(12, 2.8)) im = plt.imshow(monthly_avg, aspect="auto", cmap="coolwarm") plt.colorbar(im, label="平均气温 (°C)") plt.xticks(range(12), MONTH_LABELS) plt.yticks([0], [f"{YEAR}年"]) plt.title(f"{CITY}市 {YEAR} 年各月平均气温(热力图)") plt.tight_layout() save_and_show(filename)

何时用:二维矩阵数据、时间×类别 的强度展示。

机器学习里:特征相关矩阵热力图、混淆矩阵可视化。

六、可视化与机器学习的关系

可视化不是独立技能,而是贯穿「看数据 → 训模型 → 讲结果」的纽带。

阶段可视化作用
探索性分析(EDA)直方图、散点图发现异常与相关
特征工程箱线图比较分组、热力图看相关矩阵
训练监控损失曲线、参数收敛
算法对比多条损失曲线、参数路径
模型解释特征重要性柱状图、决策边界散点图
结果汇报各类业务图表
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 18:26:30

AI技术落地的七道生死关:从产线到医疗的系统性实践指南

1. 项目概述:这不是一场关于“未来”的演讲,而是一份AI技术落地的实操手记“Artificial Intelligence and Technological Development.”——这个标题乍看像大学通识课的PPT封面,或是某场行业峰会的背景板标语。但在我过去十年跑遍制造业产线…

作者头像 李华
网站建设 2026/6/25 18:24:56

如何高效使用Ryujinx:免费开源的Nintendo Switch模拟器完整指南

如何高效使用Ryujinx:免费开源的Nintendo Switch模拟器完整指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx是一款用C#编写的实验性Nintendo Switch模拟器&…

作者头像 李华
网站建设 2026/6/25 18:22:17

邮编驱动的医疗可及性数据管道构建指南

1. 项目概述:当邮编成为健康公平的隐形标尺“你的邮编正在决定你获得的医疗服务”——这句话听起来像一句社会评论,但在我实际跑通这个项目之前,它只是个模糊的共识。直到我拿到英国NHS(国家医疗服务体系)公开的基层诊…

作者头像 李华
网站建设 2026/6/25 18:21:31

Windows热键冲突终极解决方案:Hotkey Detective 完整使用指南

Windows热键冲突终极解决方案:Hotkey Detective 完整使用指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你…

作者头像 李华
网站建设 2026/6/25 18:16:18

告别激活弹窗:一次点击,让Windows和Office永远保持活力

告别激活弹窗:一次点击,让Windows和Office永远保持活力 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾经遇到过这样的场景:深夜加班赶项目&#xff…

作者头像 李华