我正在尝试从熊猫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
答案 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))
两个版本都会产生此结果: