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

Python绘制X轴为时间的contour等高线图相关问题咨询

问题解决方案

错误根因

plt.contour要求输入的X、Y为同维度二维网格数组,Z为对应网格点的二维数值数组,你当前传入的是一维DataFrame结构,且数据为散点格式不满足网格输入要求,因此触发类型错误。

1. 生成meshgrid网格的方法

你的原始数据是散点格式,需按以下步骤生成网格:

  • 先将时间列转换为matplotlib可识别的datetime类型
  • 对一维时间数组、D列数值数组分别去重、排序,得到x轴和y轴的坐标基准
  • 用np.meshgrid将两个一维基准数组扩展为同维度的二维网格
  • 用插值方法将原始C列的散点值映射到二维网格的每个点位上,得到Z轴的二维数组

2. 完整修改代码

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

# 1. 读取数据
load_var = pd.read_excel(r'path\file.xlsx')
# 2. 转换时间列为datetime格式,适配matplotlib时间轴渲染
load_var['Time'] = pd.to_datetime(load_var['Time'], format='%H:%M:%S')

# 3. 提取一维散点数据
x = load_var['Time'].values
y = load_var['D'].values
z = load_var['C'].values

# 4. 生成网格基准
xi = np.unique(x)  # 去重排序后的时间轴坐标
yi = np.unique(y)  # 去重排序后的D列轴坐标
Xi, Yi = np.meshgrid(xi, yi)  # 生成二维网格

# 5. 插值得到网格对应的Z值,method可选'linear'/'cubic'/'nearest'
Zi = griddata((x, y), z, (Xi, Yi), method='cubic')

# 6. 绘制等高线
plt.contour(Xi, Yi, Zi)
# 配置时间轴显示格式,避免标签重叠
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
plt.xticks(rotation=45)
plt.xlabel('Time')
plt.ylabel('D')
plt.colorbar(label='C')
plt.show()

特殊场景说明:如果你的原始数据是规则网格结构(即每个时间点对应所有D值的组合都有对应C值,总数据量=时间点数量×D值去重数量),可以跳过插值步骤,直接将z值reshape为和Xi同维度的二维数组即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:18:05