You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Matplotlib绘制基于风场U分量的二维像素图?

问题描述

现有CSV数据包含三列:Latitude(纬度)、Longitude(经度)、U component of wind(风的U分量,单位m/s)。每组坐标对应绘图中50km×50km的像素区域,共364个数据点,矩形区域未覆盖部分留白。需要用Matplotlib绘制二维图,每个区域根据风U分量值上色(颜色从红到紫的彩虹色系,对应分量的最小值到最大值),数据从CSV读取。

最佳实现方案

方案一:规则网格数据(推荐)

如果经纬度数据是规则排列的网格(比如364=14×26的网格),使用pcolormesh可精准绘制每个50km矩形区域,空白区域自动留白:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 读取CSV数据
df = pd.read_csv('你的CSV文件名.csv')

# 提取并排序经纬度唯一值,构建网格
latitudes = np.sort(df['Latitude'].unique())
longitudes = np.sort(df['Longitude'].unique())
lon_grid, lat_grid = np.meshgrid(longitudes, latitudes)

# 将U分量转换为网格格式(缺失数据自动填充为NaN)
u_grid = df.pivot(
    index='Latitude',
    columns='Longitude',
    values='U component of wind'
).values

# 绘制图形
plt.figure(figsize=(12, 7))
# 使用红到紫的彩虹色系(jet)
im = plt.pcolormesh(lon_grid, lat_grid, u_grid, cmap='jet', shading='flat')

# 添加颜色条与标签
plt.colorbar(im, label='风的U分量 (m/s)')
plt.xlabel('经度')
plt.ylabel('纬度')
plt.title('风U分量分布')

# 显示图形
plt.show()

方案二:不规则离散点

如果经纬度是不规则分布的离散点,使用scatter绘制正方形标记,调整标记大小匹配50km区域:

import pandas as pd
import matplotlib.pyplot as plt

# 读取CSV数据
df = pd.read_csv('你的CSV文件名.csv')

# 绘制散点图
plt.figure(figsize=(12, 7))
# s参数控制标记大小,根据实际可视化需求调整
scatter = plt.scatter(
    x=df['Longitude'],
    y=df['Latitude'],
    c=df['U component of wind'],
    cmap='jet',
    marker='s',  # 正方形标记
    s=600  # 调整大小以匹配50km区域的显示比例
)

# 添加颜色条与标签
plt.colorbar(scatter, label='风的U分量 (m/s)')
plt.xlabel('经度')
plt.ylabel('纬度')
plt.title('风U分量分布')

# 显示图形
plt.show()

关键说明

  • 彩虹色系使用Matplotlib内置的jet配色,正好对应从红(最小值)到紫(最大值)的渐变。
  • 方案一中,缺失数据的区域会自动显示为空白,符合需求。
  • 方案二中,s参数需要根据绘图窗口的大小和实际地理范围微调,确保正方形标记的视觉大小匹配50km的比例。

内容的提问来源于stack exchange,提问作者pwnkit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:17:38