Altair 是一个可爱的可视化库,具有很好的直观视觉语法 API。然而,我正在努力向多面图表添加带有规则标记的图层。
假设您有一个简单的数据集:
print(df[['Year', 'Profile', 'Saison', 'Pos']].to_csv())
,Year,Profile,Saison,Pos
0,2017,6.0,Sommer,VL
1,2017,6.0,Winter,VL
13,2017,6.0,Winter,HL
12,2017,6.0,Sommer,HL
18,2017,6.0,Sommer,HR
6,2017,6.0,Sommer,VR
7,2017,6.0,Winter,VR
19,2017,6.0,Winter,HR
14,2018,5.5,Winter,HL
8,2018,5.5,Winter,VR
15,2018,5.5,Sommer,HL
20,2018,4.3,Winter,HR
21,2018,5.0,Sommer,HR
3,2018,5.5,Sommer,VL
2,2018,6.2,Winter,VL
9,2018,4.5,Sommer,VR
17,2019,4.5,Sommer,HL
11,2019,4.2,Sommer,VR
22,2019,3.5,Winter,HR
10,2019,5.28,Winter,VR
5,2019,4.6,Sommer,VL
4,2019,4.9,Winter,VL
16,2019,4.0,Winter,HL
23,2019,4.5,Sommer,HR
Run Code Online (Sandbox Code Playgroud)
比您可以简单地显示它:
base = alt.Chart(df[df.Saison=='Winter']).mark_bar().encode(x='Year:O', y='Profile:Q', column='Pos:N')
base
Run Code Online (Sandbox Code Playgroud)
然后,假设我想添加水平标记来可视化一些限制:
为此,我定义了数据集:
print(Limits.to_csv())
,Profil
0,3.0
1,1.5
Run Code Online (Sandbox Code Playgroud)
并将其添加到图表集合中:
limits = alt.Chart(Limits).mark_rule(color='red').encode(y='Profil')
base + limits
Run Code Online (Sandbox Code Playgroud)
这不起作用并产生错误:
ValueError: Faceted charts cannot be layered.
Run Code Online (Sandbox Code Playgroud)
我怎样才能克服这个限制?底层的 vega-light 语法显然支持如此复杂的层组合,但我无法弄清楚如何在 Altair 中表达它。
我正在尝试使用read_hdb方法的属性where将数据从大型 HDF 存储过滤到所需的子集:
phase = pd.read_hdf(DSPATH + '/phase-table.h5', 'phase', where='EXTSIDNAME=="A"')
Run Code Online (Sandbox Code Playgroud)
根据文档,我可以指定具有基本逻辑条件的数据集中定义的任何列。根据 Pandas 文档语法,支持column_name == 'string Literal' 。
然而,该库对于我尝试指定的任何列都会引发 ValueError 异常:
ValueError: The passed where expression: EXTSIDNAME=="A"
contains an invalid variable reference
all of the variable references must be a reference to
an axis (e.g. 'index' or 'columns'), or a data_column
The currently defined references are: index,columns
Run Code Online (Sandbox Code Playgroud)
唯一不会出现错误的条件是'index=1'。
该列存在于数据存储中。如果我在没有过滤器的情况下加载它,我可以看到我正在尝试在确实存在的条件中指定:
Index(['EXTSIDNAME', 'HOSTNAME', 'TIMESTP', 'SUM_ENDDATE','MODULE_ID','MODULENAME',
'MODULE_STARTDATE', 'MODULE_ENDDATE', 'PHASE_ID','PHASENAME',
'PHASE_STARTDATE', 'PHASE_ENDDATE', 'ID', 'PhaseDuration'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
我正在使用 Anaconda …