如何解决为什么 Altair 条形图中最左边的条形不尊重选择画笔位置?
我基于合成数据创建了一个简单的条形图,在下面的代码 (generate_dataframe) 中生成。该图像具有包含数据的顶部图表和允许我沿水平轴拖动选择的下部图表。似乎有一个错误:最左边的条不受我在下图中选择的运动的影响。我使用 streamlit 来显示情节。这是正在发生的事情的图像。我在图片下方列出了代码。感谢您的建议。
Image produced when running the code,enhanced to illustrate the issue described above.
import streamlit as st
import pandas as pd
import altair as alt
import numpy.random as random
def generate_dataframe():
nrows = 400
name = [ 'n' + str(i) for i in range(300) ]
names = random.choice(name,nrows)
centrality = random.rand(nrows)
multiplier = random.choice([.3,1.,300.],nrows)
centrality *= multiplier
df = pd.DataFrame({'x':names,'y':centrality})
return df
df = generate_dataframe()
#----------------------------------
brush = alt.selection(type="interval",encodings=['x'])
axis = alt.Axis(labels=False)
base = alt.Chart(df,title="Base view").mark_bar().encode(
x=alt.X('x:N',axis=axis),y='y:Q'
).add_selection(
brush
).properties(
width=850,height=50
)
zoomed = alt.Chart(df).mark_bar().encode(
x=alt.X('x:N',scale=alt.Scale(domain=brush),y='y:Q'
).properties(
width=850,height=400
)
chart = zoomed & base
st.altair_chart(chart)
解决方法
Binding an interval selection to a scale's domain is currently not supported for ordinal and nominal domains. 一种解决方法是改用 .transform_filter()
,因此将您的代码更改为此,您将不再看到左侧的堆叠条:
zoomed = alt.Chart(df).mark_bar().encode(
x=alt.X('x:N',axis=axis),y='y:Q'
).properties(
width=850,height=400
).transform_filter(
brush
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。