python - 日期与时间图上数据的颜色映射
问题描述
我试图在二维图上绘制 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 数组或任何其他类型?一旦我拥有不同格式的数据,如何映射数据?
谢谢你的帮助。弗罗尼
解决方案
imshow
需要一个二维数组作为输入。您需要将数据重新格式化为二维数组:Date
x作为您Time
的Tgrad
值。Pandas 使用pivot
. 它确实要求您拥有间隔良好的数据点,即类似网格的数据集(Time
每个 的值相同Date
)。如果数据点没有整齐地分散在二维空间中,您链接的帖子将很有用。此外,由于 matplotlib 可以处理数据帧,因此无需转换为 numpy 数组。
C = data.pivot(index='Time', columns='Date', values='Tgrad')
fig, ax = plt.subplots()
ax.imshow(C)
推荐阅读
- slack - 在 Slack 集成 RASA 聊天机器人中添加基于按钮的问题?
- javascript - 在javascript中将十进制数转换为百分比
- python - 无法使用 pandas read_csv 解析自定义日志文件格式
- java - 为什么我的身份验证提供者没有联系到?
- python-3.x - 在 setup.py 中找出这个包是从哪个存储库安装的?
- rest - 通过 REST API 从空间模板创建文件夹
- javascript - 用数据属性填充 HTML 标签而不换行
- redis - redis管道和管道
- javascript - 如何在 vue.js 中动态切换 3 个或更多字体真棒图标
- bash - bash,如何选择是否通过变量附加重定向(根据 $append 使用 > 或 >> )