使用Holoviews Holomap绘制各天的堆积面积图

时间:2019-03-25 11:54:09

标签: python data-visualization holoviews

我正在尝试从熊猫Dataframe中绘制宽格式的Holomap。数据框有四列;日期时间,日期,V1,V2。日期时间的格式为yyyy-mm-dd hh:mm:ss,在两天内的15分钟分辨率。 V1和V2包含数据。创建HoloMap对象后,我可以访问单个堆叠的面积图,但是当我绘制整个对象时,我将获得端到端放置的两天的数据,而日期选择器(Holomap的kdim)仅隐藏了当天的数据,选择。如何使地图仅显示所选日期的数据?

import os, sys
import pandas as pd
import numpy as np
from datetime import datetime as DateTime
from holoviews import opts
import holoviews as hv
hv.extension('bokeh')
%matplotlib inline
opts.defaults(opts.Area(framewise=True))

tstamp = pd.date_range('2030-04-01',periods = 24*4*2,freq='15min')
V1 = np.random.randn(len(tstamp))
V2 = np.random.randn(len(tstamp))+5

df_in = pd.DataFrame({
            'Datetime':tstamp,
            'V1':V1,
            'V2':V2
        })
df_in['day'] = df_in.Datetime.dt.day
selected_days = df_in.day.unique()

testAreaHmap = hv.HoloMap({d: hv.Area.stack((hv.Area(df_in[df_in.day==d], label='V1',kdims=['Datetime'],vdims=['V1']).opts(color='orange')*\
                hv.Area(df_in[df_in.day==d], label='V2',kdims=['Datetime'],vdims=['V2']).opts(color='blue'))) for d in selected_days}, kdims=['d'])

testAreaHmap

1 个答案:

答案 0 :(得分:1)

您的示例中的问题似乎是framewise选项不起作用,可能是由于内联选项(.opts(color='orange')。因此,最直接的代码重写如下: / p>

testAreaHmap = hv.HoloMap({d: hv.Area.stack((hv.Area(df_in[df_in.day==d], 'Datetime', 'V1', label='V1')*\
                                             hv.Area(df_in[df_in.day==d], 'Datetime', 'V2', label='V2')))
                           for d in selected_days}, kdims=['d'])

testAreaHmap.opts(opts.Area(framewise=True, color=hv.Cycle(['orange', 'blue'])))

在这里,我们将数据的声明与设置选项分开,这通常是推荐的方法。重写此类代码的另一种方法是使用HoloViews的功能来应用groupby操作。如果您使用的是.to API,则如下所示:

area_v1 = hv.Dataset(df_in).to(hv.Area, 'Datetime', 'V1', 'day', label='V1')
area_v2 = hv.Dataset(df_in).to(hv.Area, 'Datetime', 'V2', 'day', label='V2')
stacked_areas = (area_v1 * area_v2).map(hv.Area.stack, hv.Overlay)

stacked_areas.opts(opts.Area(color=hv.Cycle(['orange', 'blue']), framewise=True))

两个版本都会产生此结果:

enter image description here