一、前言:从数据到图表,科研可视化必备

在气象、地理、新能源等专业的大学生科研中,数据可视化是论文配图、成果展示的关键能力。Python凭借Matplotlib、Seaborn、Cartopy等库,成为气象数据可视化的主流工具,上手简单、功能强大,适合新手学习。

本文将结合我科研中常用的气象数据(来自羲和能源气象大数据平台,亲测精度高、适配性强),手把手教大家用Python完成数据读取、预处理、时空分布绘图,代码可直接复用,适合大学生入门实战,帮大家快速掌握科研可视化技巧。

二、准备工作:数据获取与环境配置
1. 数据获取(实操参考)

我所用的南京地区1985-2025年小时级温度数据,来自一款常用的气象大数据工具(羲和能源气象大数据平台),获取步骤很简单:注册认证后,定位南京,选择温度参数和对应时间范围,一键下载CSV格式即可,数据包含时间、气温(℃)、经度、纬度等字段,格式规范,无需复杂处理。

2. 环境配置

安装核心库,适合Python新手,直接复制命令到终端运行即可:

bash
pip install pandas matplotlib cartopy numpy

三、完整代码实现(逐行解析)

以下代码基于Python 3.9版本编写,逐行添加注释,新手可跟着步骤运行,遇到问题可参考注释或留言交流,代码可直接复用,只需替换自己下载的数据文件路径即可。

1. 数据读取与预处理

python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from datetime import datetime

# 1. 读取下载的CSV数据(替换为自己的文件路径)
df = pd.read_csv("nanjing_temp.csv")

# 2. 时间字段转换(适配Python时间格式,方便后续按时间筛选)
df["time"] = pd.to_datetime(df["time"])

# 3. 数据预处理:去除缺失值、筛选夏季(7月)数据(可根据自己的研究主题调整)
df = df.dropna()
summer_df = df[df["time"].dt.month == 7]  # 以夏季温度分布分析为例

2. 时空分布绘图(1985-2025年7月平均温度空间分布图)

绘制的空间分布图符合学术规范,可直接用于论文配图,配色、标注可根据自己的需求调整:

python
# 1. 计算7月平均温度(核心步骤,获取空间分布的核心数据)
mean_temp = summer_df.groupby(["lon", "lat"])["temperature"].mean().reset_index()

# 2. 创建画布与投影(中国区域适配,提升图表专业性)
fig, ax = plt.subplots(figsize=(10, 8), subplot_kw={"projection": ccrs.PlateCarree()})

# 3. 绘制温度空间分布散点图,颜色深浅表示温度高低
scatter = ax.scatter(mean_temp["lon"], mean_temp["lat"], c=mean_temp["temperature"],
                      cmap="coolwarm", s=50, alpha=0.7, transform=ccrs.PlateCarree())

# 4. 添加地理要素(海岸线、网格、颜色条),提升图表完整性
ax.coastlines(resolution="50m", linewidth=0.8)
ax.gridlines(draw_labels=True, linewidth=0.5, alpha=0.5)
cbar = plt.colorbar(scatter, ax=ax, shrink=0.8)
cbar.set_label("平均温度 (℃)", fontsize=12)

# 5. 设置标题与显示,可调整字体大小、间距
ax.set_title("南京地区1985-2025年7月平均温度空间分布图", fontsize=14, pad=20)
plt.tight_layout()
plt.show()

3. 时间序列绘图(40年夏季平均温度变化趋势)

用于展示长时序温度变化特征,适合气候变暖相关研究,趋势线可直观体现变化规律:

python
# 1. 计算每年7月平均温度,获取时序变化数据
yearly_temp = summer_df.groupby(summer_df["time"].dt.year)["temperature"].mean()

# 2. 绘制时间序列图,线条颜色、粗细可调整
plt.figure(figsize=(12, 6))
plt.plot(yearly_temp.index, yearly_temp.values, color="red", linewidth=2, marker="o", markersize=4)

# 3. 添加趋势线与标注,直观展示温度变化趋势
z = np.polyfit(yearly_temp.index, yearly_temp.values, 1)
p = np.poly1d(z)
plt.plot(yearly_temp.index, p(yearly_temp.index), "r--", alpha=0.8, label=f"趋势线:{z[0]:.4f}x + {z[1]:.2f}")

# 4. 图表美化,适配论文配图要求
plt.xlabel("年份", fontsize=12)
plt.ylabel("7月平均温度 (℃)", fontsize=12)
plt.title("南京地区1985-2025年夏季平均温度变化趋势", fontsize=14)
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

四、代码解析与核心知识点

结合自己的学习经验,给大家梳理几个核心知识点,帮助大家理解代码,灵活运用到自己的科研中:

  • 数据读取:我所用的CSV数据来自气象大数据工具,格式规范、无乱码,Pandas可直接读取,无需复杂的格式转换,节省时间;如果大家用其他渠道获取的数据,可参考代码中的预处理步骤,去除缺失值、异常值。
  • 时间处理:利用pd.to_datetime转换时间字段,轻松实现按年、月、日筛选数据,适配时序分析需求,这是气象数据处理的常用技巧。
  • 空间绘图:Cartopy库实现地理投影、海岸线叠加,绘制的空间分布图符合学术规范,可直接用于论文,新手可重点掌握这个库的基础用法。
  • 趋势分析:通过多项式拟合生成温度变化趋势线,直观展示40年气候变化特征,适合气候变暖、区域气象变化等相关研究,可灵活调整拟合次数。
五、大学生拓展应用方向

掌握以上代码后,大家可结合自己的专业方向,拓展以下应用场景,提升科研能力:

  • 多要素联动分析:利用气象工具获取风速、辐射、湿度等数据,绘制多要素时空分布图,分析气象要素关联性,丰富论文内容。
  • 极端天气分析:筛选高温、低温、暴雨等极端天气数据,统计发生频率、时空分布,用于灾害风险评估项目,提升科研实用性。
  • 机器学习建模:以历史温度、辐射数据为样本,构建温度预测、发电量预测模型,参与科创竞赛或大创项目,提升综合能力。
  • 论文配图优化:调整配色、字体、标注,生成高分辨率学术图表,提升论文质量,助力毕业论文答辩。
六、总结与学习小贴士

本文结合常用气象数据工具获取的高精度数据,实现了气象数据时空可视化,代码简洁易懂、可直接复用,适合气象、地理、新能源专业的大学生入门实战。

学习小贴士:新手建议先跟着代码逐行运行,理解每个步骤的作用,再尝试修改参数(如时间范围、参数类型、图表样式),逐步掌握Python气象可视化技巧;如果获取数据遇到问题,可参考上篇文章的实操步骤,或留言交流。

下期预告:基于气象工具的API接口,实现气象数据自动化获取(附Python代码),告别手动下载,提升科研效率。

更多推荐