gpt4 book ai didi

python - 根据组统计对 Altair 图的各个方面进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 01:56:39 25 4
gpt4 key购买 nike

我想根据一些组统计数据(例如均值、西格玛等)更改 Altair 图表的各个方面的顺序。

在某些情况下,排序函数可能会更复杂,例如两条移动平均线之间的delta,EWMA的斜率等,所以我也希望能够在可能的情况下在订单中“通过”。

这是可测试用例代码:

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()

生成此图表,其中各个方面按字母顺序排序:

enter image description here

我希望排序顺序是从最大均值到最小均值:

var_order = df.groupby('variable').mean().sort_values('variable', ascending=False).index.values
var_order

产生:

array(['D', 'C', 'B', 'A'], dtype=object)

我读过一些帖子表明可以对 x 和 y 进行排序,但在这种情况下我想自己对面孔进行排序。

最佳答案

您可以在 facet 编码上使用 EncodingSortField;例如

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()

chart output

对于更复杂的计算,您可以使用计算转换和/或聚合转换来计算新字段,并按其排序。

关于python - 根据组统计对 Altair 图的各个方面进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56674270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com