我想基于一些组统计信息(例如均值,西格玛等)来更改Altair图表的构面顺序。
在某些情况下,排序函数可能会更复杂,例如两个移动平均值之间的差异,EWMA的斜率等,因此,我也希望能够按顺序“通过”。 / p>
这是可测试的案例代码:
import pandas as pd
import numpy as np
import altair as alt
alt.renderers.enable('notebook')
# make some data to test
N = 500
df = pd.DataFrame({
'Date Time': pd.date_range('2019-06-19', periods=N, freq='H'),
'A': np.random.normal(6, 1, N),
'B': np.random.normal(5, 1, N),
'C': np.random.normal(7, 1, N),
'D': np.random.normal(8, 1, N)
}).melt('Date Time')
# render the chart using facets
p = alt.Chart(df).mark_point().encode(
facet='variable',
y='value',
x='Date Time',
color='variable',
)
# set some aditional properties
p.properties(width=230, height=150, columns=3).resolve_scale()
以下哪个图表会按字母顺序对构面进行排序:
我希望排序顺序为最大均值到最小均值:
var_order = df.groupby('variable').mean().sort_values('variable', ascending=False).index.values
var_order
产生:
array(['D', 'C', 'B', 'A'], dtype=object)
我阅读了一些文章,指出可以对x和y进行排序,但是在这种情况下,我想对面孔进行排序。
答案 0 :(得分:2)
您可以在EncodingSortField
编码上使用facet
;例如
p = alt.Chart(df).mark_point().encode(
y='value',
x='Date Time',
color='variable',
facet=alt.Facet('variable',
sort=alt.EncodingSortField('value', op='mean', order='descending')
)
)
# set some aditional properties
p.properties(width=230, height=150, columns=3).resolve_scale()
对于更复杂的计算,您可以使用计算转换和/或聚合转换来计算新字段,并以此排序。