python - 日期与时间图上数据的颜色映射

标签 python pandas imshow

我试图在二维图上绘制 3 个变量 x、y、z,其中 x(日期)在 x 轴上,y(时间)在 y 轴上,z(温度)用色标映射。 我在 pandas Dataframe 中提供了三个可用变量,并创建了一个带有日期数字的额外列,以便 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

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

matplotlib 2D plot from x,y,z values Dates in the xaxis for a matplotlib plot with imshow

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

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 数组或任何其他类型?当我拥有不同格式的数据时,如何映射数据?

谢谢你的帮助。 沃尼

最佳答案

imshow 需要一个二维数组作为输入。您需要将数据重新格式化为二维数组:Date x Time,并使用 Tgrad 作为值。 Pandas 通过pivot 使这变得相当简单。它确实要求您拥有间隔良好的数据点,即类似网格的数据集(每个日期具有相同的时间值)。如果数据点没有整齐地分散在二维空间中,您链接的帖子将会很有用。此外,无需转换为 numpy 数组,因为 matplotlib 可以处理数据帧。

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

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

关于python - 日期与时间图上数据的颜色映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53770530/

相关文章:

python - date_range 不接受我想要使用的变量?

python - 如果另一列中的行满足条件则填充 nan

python - 确定值的分配 - Python

python - 如何让 matplotlib 的 imshow 每秒刷新一次?

python - 如何使用 matplotlib 在形状上画一个洞

python - 更新时 Opencv imshow() 卡住

python - 创建指定数据点的列表或数组

python - Pandas 数据帧 : Calculate Sum based on boolean values in another column

Python Flask - 客户端 GUI

python - 使用 python 将 csv 转换为 xls