Интерактивный сюжет колонн панд с использованием питона - PullRequest
0 голосов
/ 28 мая 2018

У меня есть следующая таблица:

np.random.seed(42)
df = pd.DataFrame(np.random.randint(0, 1000, size=(24,53)))
df['hour'] = range(24)
for col in df.columns[:-1]:
    df.rename({col: str(col)}, axis=1, inplace=True)

, которую я хочу построить.Столбцы (кроме hour) соответствуют неделям года , а строки - часам дня .Непосредственно с использованием панд это будет:

df[df.columns[:-1]].plot(legend=False);

, что дает:

Plot using pandas

Однако я хочу добавить интерактивности в игру.Я думал об использовании bokeh, но оно меняется так быстро, что я не знаю, как это сделать сейчас.Я пытался использовать holoviews:

import holoviews as hv
hv.extension('bokeh')
%%opts Curve [tools=['hover']]
lines = [hv.Curve((df['hour'], df[col]), label=col) for col in df.columns[:-1]]

from functools import reduce
reduce(lambda x, y: x*y, lines) # I'm not sure this is a clean way

, получая что-то вроде:

enter image description here

Это делает почти что я хочу.В частности, инструмент наведения, показывает координаты x / y точек под ним.Я хочу, чтобы это показывало неделю соответствующей кривой.Наконец, есть ли более питонский способ сделать это?Может быть, напрямую с bokeh?

1 Ответ

0 голосов
/ 28 мая 2018

Вы можете взглянуть на новый проект holoplot , который призван стать (почти) заменой API построения графиков панд, построенного на HoloViews и Bokeh.Это позволит вам использовать обычный API панд:

import holoplot.pandas
df[df.columns[:-1]].plot(legend=False)

enter image description here

Обратите внимание, что он все еще находится в активной разработке.Отдельно ради полноты проще выразить ваш код HoloViews:

lines = [hv.Curve((df['hour'], df[col]), label=col) for col in df.columns[:-1]]
hv.Overlay(lines)
...