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
相关产品推荐
相关产品推荐

