Python Altair绘制了两个偏差标准

Python Altair绘制了两个偏差标准,python,standard-deviation,altair,Python,Standard Deviation,Altair,有没有办法制作一个Python Altair图,显示两个偏差标准?使用mark\u errorbar(extent='stdev')只显示一个标准偏差 # Only shows one standard deviation. alt.Chart(data).mark_errorbar(extent='stdev').encode( x=alt.X('quantity:O', title='Quantity'), y=alt.Y('value:Q', title='

有没有办法制作一个Python Altair图,显示两个偏差标准?使用
mark\u errorbar(extent='stdev')
只显示一个标准偏差

# Only shows one standard deviation.
alt.Chart(data).mark_errorbar(extent='stdev').encode(
        x=alt.X('quantity:O', title='Quantity'),
        y=alt.Y('value:Q', title='Value')
    )

没有参数值允许您使用
mark\u errorbar
执行此操作,但您可以在pandas中预先计算它,并使用
mark\u规则
y
+
y2

import altair as alt
from vega_datasets import data

source = data.cars()

hp_agg = (
    source
    .groupby('Origin')
    ['Horsepower']
    .agg(['mean', 'std'])
    .assign(error_lower = lambda df: df['mean'] - 2 * df['std'],
            error_upper = lambda df: df['mean'] + 2 * df['std'])
    .reset_index())

error_bars = alt.Chart(hp_agg).mark_rule().encode(
    x='Origin',
    y='error_lower',
    y2='error_upper')

means = alt.Chart(hp_agg).mark_circle(color='black').encode(
    x='Origin',
    y='mean')

error_bars + means


您也可以使用Altair中的变换而不是熊猫来实现相同的结果

import altair as alt
from vega_datasets import data

source = data.cars()

error_bars = (
    alt.Chart(source).mark_rule().encode(
        x='Origin',
        y='error_lower:Q',
        y2='error_upper:Q')    
    .transform_aggregate(
        mean = 'mean(Horsepower)',
        stdev = 'stdev(Horsepower)',
        groupby=['Origin'])
    .transform_calculate(
        error_lower = 'datum.mean - 2 * datum.stdev',
        error_upper = 'datum.mean + 2 * datum.stdev'))
        
means = alt.Chart(source).mark_circle(color='black').encode(
        x='Origin',
        y='mean(Horsepower)')

error_bars + means