Есть ли способ для iPython генерировать эти виды диаграмм, учитывая данные?

Эта картинка

Пожалуйста, проигнорируйте фоновое изображение. Передняя диаграмма - это то, что меня интересует, показывая использование панд или numpy или scipy (или что-нибудь в iPython).

У меня есть dataframe, где каждая строка представляет температуры в течение одного дня. Это пример некоторых строк:

100 200 300 400 500 600 ...... 2300
10/3/2013 53*C 57*C 48*C 49*C 54*C 54*C 55*C
10/4/2013 45*C 47*C 48*C 49*C 50*C 52*C 57*C

Есть ли способ получить диаграмму, которая представляет изменения от часа к часу, используя первый столбец как "нуль",

2 ответа

Что-то быстрое и грязное, что может помочь вам в большей части пути, если ваш фрейм данных называется df:

import matplotlib.pyplot as plt
plt.imshow(df.T.diff().fillna(0.0).T.drop(0, axis=1).values)

Поскольку я не могу легко создать примерную версию с вашими точными метками столбца, может быть небольшое дополнительное вмешательство, избавляясь от любых столбцов индекса, которые включены в diff и перемещаются с транспозицией. Но это сработало, чтобы сделать простой график тепловой карты для меня на случайном примере данных.

Затем вы можете создать фигуру matplotlib или объект оси и указать все, что вы хотите для меток x- и оси y.


Вы можете просто строить строки по одному для каждой строки со смещением:

nrows, ncols = 12, 30

# make up some fake data:
d = np.random.rand(nrows, ncols)
d *= np.sin(2*np.pi*np.arange(ncols)*4/ncols)
d *= np.exp(-0.5*(np.arange(nrows)-nrows/2)**2/(nrows/4)**2)[:,None]

#this is all you need, if you already have the data:
for i, r in enumerate(d):
 plt.fill_between(np.arange(ncols), r+(nrows-i)/2., lw=2, facecolor='white')

Вы можете сделать все сразу, если вам не нужен цвет заливки, чтобы заблокировать предыдущую строку:

d += np.arange(nrows)[:, None]
plt.plot(d.T)

licensed under cc by-sa 3.0 with attribution.