Altair 多面直方图 - 独立尺度
altair faceted histogram - independent scales
假设我有一个数据集,其中变量之间的比例可以完全不同。我想为每个数字变量创建直方图。我试图让 x 和 y 比例尺彼此独立,这样比例尺就不会影响视觉质量。但即使我使用 resolve_scale()
它也只会使 y-scale 独立,而 x 在所有变量中仍然很常见。从下图中可以看出,可以通过应用代码获得。这是期望的行为还是我遗漏了什么?
我的问题是:
1.如何让x尺度独立?
2、怎样才能让标题更贴近剧情?
感谢您的帮助。
版本:python 牵牛星 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'
)
您的比例是独立的,但您的装箱不是。不幸的是,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'
)
假设我有一个数据集,其中变量之间的比例可以完全不同。我想为每个数字变量创建直方图。我试图让 x 和 y 比例尺彼此独立,这样比例尺就不会影响视觉质量。但即使我使用 resolve_scale()
它也只会使 y-scale 独立,而 x 在所有变量中仍然很常见。从下图中可以看出,可以通过应用代码获得。这是期望的行为还是我遗漏了什么?
我的问题是:
1.如何让x尺度独立?
2、怎样才能让标题更贴近剧情?
感谢您的帮助。
版本:python 牵牛星 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'
)
您的比例是独立的,但您的装箱不是。不幸的是,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'
)