猿问

altair 多面直方图 - 独立刻度

假设我有一个数据集,其中的变量可以彼此完全不同地缩放。我想为每个数值变量创建直方图。我试图使x和y比例彼此独立,以便规模不会影响视觉质量。但即使我使用它,也只能使y尺度独立,而x在所有变量中仍然很常见。这可以从下图中看到,可以通过应用代码获得。这是期望的行为还是我错过了什么?resolve_scale()


我的问题是:

1.如何使x刻度独立?

2. 如何使标题更接近剧情?


感谢您的帮助。


版本: 蟒蛇 4.0


alt.__version__

'4.0.1'

import altair as alt


data = alt.datasets.load_dataset('flights-2k')

chosen_origin_airports = data.groupby('origin').size().sort_values(ascending=False).head(12).index.tolist()

data = data[data.origin.isin(chosen_origin_airports)]

data.loc[data.origin=='BWI', 'delay']  = data.loc[data.origin=='BWI', 'delay'] * (10000)


alt.Chart(data=data).mark_bar().encode(

    x = alt.X('delay:Q', 

              axis=alt.Axis(title=''), 

              scale=alt.Scale(zero=False),

              bin=alt.Bin(maxbins=20)),

    y = alt.Y('count():Q', 

              axis=alt.Axis(title='')),

    color = alt.Color('origin:N')

).properties(

    width=130,

    height=130

).facet(

    alt.Column('origin:N', sort = alt.EncodingSortField(order=None)),

    align= 'all',

    padding=0,

    columns=4,

    spacing=0

).properties(

    title=''

).configure_title(

    fontSize=20,

    font='Courier',

    anchor='middle',

    color='gray',

    align='left'

).configure_header(

    title=None,

    titleColor='green',

    titleFontSize=14,

    labelColor='forestgreen',

    labelFontSize=14

).resolve_axis(

    x='independent',

    y='independent'

).resolve_scale(

    x='independent', 

    y='independent'

)


梵蒂冈之花
浏览 433回答 1
1回答

翻过高山走不出你

您的秤是独立的,但您的分档不是。遗憾的是,Vega-Lite 语法没有提供简单的方法来定义将不同的 bin 参数应用于不同的数据子集的 bin 转换,因此您必须手动对图表的每个面板使用不同的 bin 转换。我可能会做这样的事情:chart = alt.Chart(data).mark_bar().encode(    x = alt.X('delay:Q',               axis=alt.Axis(title=''),               scale=alt.Scale(zero=False),              bin=alt.Bin(maxbins=20)),    y = alt.Y('count():Q',               axis=alt.Axis(title='')),    color = alt.Color('origin:N')).properties(    width=130,    height=130)alt.ConcatChart(    concat=[      chart.transform_filter(alt.datum.origin == value).properties(title=value)      for value in sorted(data.origin.unique())    ],    columns=4).configure_title(    fontSize=20,    font='Courier',    anchor='middle',    color='gray',    align='left').resolve_axis(    x='independent',    y='independent').resolve_scale(    x='independent',     y='independent')
随时随地看视频慕课网APP

相关分类

Python
我要回答