我有一张表格如下:
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);
得到以下特性:
但是,我想在游戏中添加交互性。我想过使用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
产生类似的东西:
这几乎是我想要的 。特别是悬停工具,显示其下方点的x / y坐标。我希望它显示相应曲线的周。最后,有更多的pythonic方式吗?也许直接用bokeh
?
答案 0 :(得分:2)
您可以查看新的holoplot项目,该项目(几乎)是用于构建在HoloViews和Bokeh上构建的pandas绘制API的直接替代品。这将允许您使用常规pandas API:
import holoplot.pandas
df[df.columns[:-1]].plot(legend=False)
请注意,它仍在积极开发中。另外,为了完整起见,表达HoloViews代码的简单方法是:
lines = [hv.Curve((df['hour'], df[col]), label=col) for col in df.columns[:-1]]
hv.Overlay(lines)