首页 > 解决方案 > 日期与时间图上数据的颜色映射

问题描述

我试图在二维图上绘制 3 个变量 x、y、z,x 轴上是 x(日期),y 轴上是 y(时间),而 z(温度)是用色标映射的。我在 pandas Dataframe 中有可用的三个变量,并使用 datenumber 创建了一个额外的列,以便 matplotlib 可以使用它。

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

data=pd.DataFrame() 
data['datenum']=mdates.date2num(data['Date'])

例子:

            Date Time     Tgrad   datenum
0     2016-08-01   00 -0.841203  736177.0
1     2016-08-01   01 -0.629176  736177.0
2     2016-08-01   02 -0.623608  736177.0
3     2016-08-01   03 -0.615145  736177.0
4     2016-08-01   04 -0.726949  736177.0
5     2016-08-01   05 -0.788864  736177.0
6     2016-08-01   06 -0.794655  736177.0
7     2016-08-01   07 -0.775724  736177.0
8     2016-08-01   08 -0.677951  736177.0

我一直在尝试遵循以下建议:

来自 x、y、z 值的 matplotlib 2D 图 使用 imshow 的 matplotlib 图的x 轴日期

但是由于我认为输入数据的错误形状而没有成功。我尝试过这样的事情:

fig, ax = plt.subplots()
ax.imshow(data['Tgrad'], extent = [min(data['datenum']), max(data['datenum']),min(data['Time']), max(data['Time'])], cmap="autumn", aspect = "auto")
ax.xaxis_date()

但是得到一个 ValueError:

ValueError: setting an array element with a sequence

是否有必要将数据作为 numpy 数组或任何其他类型?一旦我拥有不同格式的数据,如何映射数据?

谢谢你的帮助。弗罗尼

标签: pythonpandasimshow

解决方案


imshow需要一个二维数组作为输入。您需要将数据重新格式化为二维数组:Datex作为您TimeTgrad值。Pandas 使用pivot. 它确实要求您拥有间隔良好的数据点,即类似网格的数据集(Time每个 的值相同Date)。如果数据点没有整齐地分散在二维空间中,您链接的帖子将很有用。此外,由于 matplotlib 可以处理数据帧,因此无需转换为 numpy 数组。

C = data.pivot(index='Time', columns='Date', values='Tgrad')

fig, ax = plt.subplots()
ax.imshow(C)

推荐阅读