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

将Pandas表格转换为矩阵生成网格:CO数据热力图绘制求助

解决方法:在Height vs Longitude网格上可视化CO浓度

别发愁,其实用Python的可视化工具就能轻松搞定你的需求!下面我给你两种实用方案,从简单到进阶,你可以根据自己的数据情况来选:

方案1:直接绘制散点图(最适合离散原始数据)

如果你的数据是零散的采样点,不需要严格的网格对齐,直接用散点图就能把每个点的CO浓度用颜色直观体现出来。用matplotlib就能实现:

import matplotlib.pyplot as plt
import pandas as pd

# 假设你的数据集叫df,包含'Longitude'、'height'、'CO'三列
df = pd.DataFrame({
    'Longitude': [110, 110.5, 111, 110.2, 110.8],
    'height': [100, 200, 150, 250, 300],
    'CO': [0.5, 0.8, 0.6, 1.2, 0.9]
})

plt.figure(figsize=(10,6))
# 核心逻辑:x轴放经度,y轴放高度,颜色绑定CO值,选个顺眼的颜色映射
scatter = plt.scatter(df['Longitude'], df['height'], c=df['CO'], cmap='viridis', s=50)

# 加上颜色条和标签,让图更清晰
plt.colorbar(scatter, label='Average CO Concentration')
plt.xlabel('Longitude')
plt.ylabel('Height')
plt.title('CO Concentration Distribution (Height vs Longitude)')
plt.show()

这个方法不用额外处理数据,直接用原始采样点,每个点的位置和颜色都对应真实值,非常直观。

方案2:生成网格化热力图(适合连续网格展示需求)

如果你想要类似地形图的连续网格热力图,就需要先把离散点插值成二维网格。这里会用到numpy和scipy的插值工具:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from scipy.interpolate import griddata

# 还是用示例数据集
df = pd.DataFrame({
    'Longitude': [110, 110.5, 111, 110.2, 110.8],
    'height': [100, 200, 150, 250, 300],
    'CO': [0.5, 0.8, 0.6, 1.2, 0.9]
})

# 1. 先定义网格的x、y轴范围,生成均匀网格
xi = np.linspace(df['Longitude'].min(), df['Longitude'].max(), 100)
yi = np.linspace(df['height'].min(), df['height'].max(), 100)
xi, yi = np.meshgrid(xi, yi)

# 2. 用插值方法把离散的CO值映射到网格上
# 可选插值方式:'linear'(线性)、'nearest'(最近邻)、'cubic'(三次),按需选
zi = griddata((df['Longitude'], df['height']), df['CO'], (xi, yi), method='linear')

# 3. 绘制热力图
plt.figure(figsize=(10,6))
plt.pcolormesh(xi, yi, zi, cmap='viridis', shading='auto')
plt.colorbar(label='Average CO Concentration')
plt.xlabel('Longitude')
plt.ylabel('Height')
plt.title('Gridded CO Concentration (Height vs Longitude)')
plt.show()

为什么你之前的方法容易出错?

你提到尝试用条件判断手动构建矩阵,其实完全没必要!上面的工具已经帮你处理了离散点到网格的转换,不需要自己写循环或条件判断填充矩阵——既容易出错又麻烦。

如果你的数据本身就是规则网格(比如每个经度和高度的组合都有对应值),那更简单,直接用pivot转成二维矩阵,再用seaborn的热力图绘制:

import seaborn as sns

# 假设数据是规则网格结构
grid_df = df.pivot(index='height', columns='Longitude', values='CO')

plt.figure(figsize=(10,6))
sns.heatmap(grid_df, cmap='viridis', annot=True, fmt='.1f')
plt.xlabel('Longitude')
plt.ylabel('Height')
plt.title('CO Concentration Heatmap')
plt.show()

你可以根据自己的数据类型(离散点/规则网格)选对应的方法,试试看应该就能解决问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:43:33