使用python的pandas列的交互式绘图

时间:2018-05-28 12:46:03

标签: python pandas bokeh holoviews

我有一张表格如下:

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坐标。我希望它显示相应曲线的周。最后,有更多的pythonic方式吗?也许直接用bokeh

1 个答案:

答案 0 :(得分:2)

您可以查看新的holoplot项目,该项目(几乎)是用于构建在HoloViews和Bokeh上构建的pandas绘制API的直接替代品。这将允许您使用常规pandas 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)