简体   繁体   English

Altair 交互式图表:显示所有轴标签,而 transform_filter 仅获取部分数据

[英]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.

相关问题 Altair selection_single 返回一个向量:如何在 transform_filter 中处理这个? - Altair selection_single returning a vector: how to handle this in transform_filter? Altair- 显示所有轴刻度但仅显示一些刻度标签 - Altair- Display All Axis Ticks But Only Some Tick Labels 将过滤器转换应用于 Altair plot,同时保留所有图例类别 - Apply filter transform to Altair plot while keeping all legend categories 使用交互式 plot 在 Altair 中仅缩放一个轴 - Scale only one axis in Altair with interactive plot Altair 图表仅将数据保存到 html 这实际上是 plot 的一部分 - Altair chart save only the data to html that is actually part of the plot 如何隐藏轴线但在 Altair 的图表中显示刻度线,同时积极使用“轴”参数? - How to hide axis lines but show ticks in a chart in Altair, while actively using “axis” parameter? 如何在altair中显示部分重复图表 - How to show part of the repeated chart in altair 选择在 python 的 altair 图表上显示多少 x 轴标签 - Choosing how many x axis labels display on an altair chart in python 如何在时间线图中显示 Matplotlib 中的所有 Y 轴标签? - How to show all Y-Axis Labels in Matplotlib in TimeLine Chart? 如何使用 altair 在 x 和 y 轴上进行条形图交互 - How to make bar chart interactive on both x and y axis using altair
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM