Цветовое отображение данных на графике даты и времени - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь построить 3 переменные x, y, z на двухмерном графике, где x (дата) на оси x, y (время) на оси y и z (температура) отображаются с помощью шкалы цветов.У меня есть три переменные, доступные в DataFrame pandas, и я создал дополнительный столбец с номером даты, чтобы 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

Я пытался следовать этим советам:

2D-график matplotlib из значений x, y, z Даты в xaxis для сюжета matplotlib с 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

Нужно ли иметь данные в виде массива или любого другого типа?И как я могу отобразить данные, если они у меня есть в другом формате?

Спасибо за помощь.Vroni

1 Ответ

0 голосов
/ 14 декабря 2018

imshow требует 2d массив в качестве ввода.Вам нужно будет переформатировать ваши данные в 2d массив: Date x Time с Tgrad в качестве значений.Панды делают это довольно легко с pivot.Это требует, чтобы у вас были хорошо разнесенные точки данных, то есть набор данных в виде сетки (одинаковые Time значения для каждого Date).Пост, на который вы ссылаетесь, будет полезен, если точки данных не будут аккуратно разбросаны в двухмерном пространстве.Кроме того, нет необходимости преобразовывать в пустой массив, поскольку matplotlib может обрабатывать кадры данных.

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

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