[英]Altair interactive chart: Show all axis labels while transform_filter only takes part of the data
See example below.请参见下面的示例。 What I would like to happen is that the barchart (on right) always shows all xlabels (A to Z), regardless of whether they exist in the selection (in left chart).
我想要发生的是条形图(右侧)始终显示所有 xlabels(A 到 Z),无论它们是否存在于选择中(在左侧图表中)。 I find a lot of information online about formatting labels, but not about setting them.
我在网上找到了很多关于格式化标签的信息,但没有关于设置它们的信息。 Can I manually set the xlabels somehow, or use the not-filtered data as a base for the xlabels?
我可以以某种方式手动设置 xlabels,还是使用未过滤的数据作为 xlabels 的基础?
import altair as alt
import pandas as pd
import random
import string
random.seed(42)
consultation_dates = pd.date_range(start='1/1/2018', end='1/08/2020')
disease_codes = random.choices(string.ascii_uppercase, k=len(consultation_dates))
consultation_weights = [random.randint(1, 4) for i in range(len(consultation_dates))]
df = pd.DataFrame({'date': consultation_dates,
'disease_code': disease_codes,
'consultation_weight': consultation_weights})
selected_range = alt.selection_interval(encodings=['x'])
use_over_time = alt.Chart(df).mark_area().encode(
x='yearquarter(date):Q',
y='sum(consultation_weight):Q'
).add_selection(
selected_range
)
use_by_disease = alt.Chart(df).mark_bar().encode(
x='disease_code:N',
y='sum(consultation_weight):Q'
).transform_filter(
selected_range
)
use_over_time | use_by_disease
Found my own answer.找到了我自己的答案。 It can be done with layering!
它可以通过分层来完成!
import altair as alt
import pandas as pd
import random
import string
random.seed(42)
consultation_dates = pd.date_range(start='1/1/2018', end='1/08/2020')
disease_codes = random.choices(string.ascii_uppercase, k=len(consultation_dates))
consultation_weights = [random.randint(1, 4) for i in range(len(consultation_dates))]
df = pd.DataFrame({'date': consultation_dates,
'disease_code': disease_codes,
'consultation_weight': consultation_weights})
selected_range = alt.selection_interval(encodings=['x'])
use_over_time = alt.Chart(df).mark_area().encode(
x='yearquarter(date):Q',
y='sum(consultation_weight):Q'
).add_selection(
selected_range
)
use_by_disease_base = alt.Chart(df).mark_bar(opacity=0.3).encode(
x='disease_code:N',
y='sum(consultation_weight):Q',
color=alt.value('lightgray')
)
use_by_disease = alt.Chart(df).mark_bar(opacity=0.3).encode(
x='disease_code:N',
y='sum(consultation_weight):Q'
).transform_filter(
selected_range
)
use_over_time | (use_by_disease_base + use_by_disease)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.