首页 > 解决方案 > Altair:如何以预定义的缩放开始交互式标称条形图?

问题描述

我正在使用 Altair 构建一个简单的垂直条形图。它有很多名义上的列,我在interactive()最后调用了,所以我可以进行缩放和平移。

如何开始缩放比例,使其仅开始显示最左边的 10 列?

我设法只显示了前 10 列,但它阻止了我平移:

sorted_values = df.sort_values('nota', ascending=False)['CO_ESCOLA'].values
(alt.Chart(df).mark_bar()
 .encode(x=alt.X("CO_ESCOLA:N", 
                 sort=sorted_values, 
                 scale=alt.Scale(domain=sorted_values[:10])), 
         y="nota:Q")
 .properties(width=1000)
 .interactive()
)

标签: pythondata-visualizationaltair

解决方案


我不是牵牛星专家,但你的问题启发了我做一些研究。似乎无法在条形图中向左或向右移动它。用户选择功能可以在显示整个图形图像的同时通过更改选择的颜色来突出显示选择。如果此技术不适合您的可视化场景,您可以忽略我的回答。代码改编自官方参考中的代码。

import pandas as pd
import altair as alt
import numpy as np
import random, string

def randomname(n):
    return ''.join(random.choices(string.ascii_letters, k=n))

df = pd.DataFrame({'nota':np.random.randint(0,50,(30,))})
df['CO_ESCOLA'] = df['nota'].apply(lambda x:randomname(5))

sorted_values = df.sort_values('nota', ascending=False)['CO_ESCOLA'].values
base = alt.Chart(df).mark_bar(
    color='steelblue',
    opacity=0.3,
).encode(
    x=alt.X("CO_ESCOLA:N",
            sort=sorted_values,
            scale=alt.Scale(domain=sorted_values)
           ),
    y=alt.Y("nota:Q",
            )#scale=alt.Scale(domain=[0,55])
).properties(
    width=1000
)

text = base.mark_text(align='center',
                      baseline='middle',
                      color='yellow',
                      dy=10
).encode(
    text='nota:Q'
)

brush = alt.selection_interval(encodings=['x'],empty='all')# _interval
background = base.add_selection(brush)
selected = base.transform_filter(brush).mark_bar(color='steelblue')

alt.layer(background, selected, text).interactive()

在此处输入图像描述


推荐阅读