Python Altair-设置交互式图形的最小条高

Python Altair-设置交互式图形的最小条高,python,data-visualization,vega-lite,altair,Python,Data Visualization,Vega Lite,Altair,我目前正在生成一个交互式堆叠条形图,在这里,可以单击单个堆叠的条形图来更新其他图形 我遇到的问题是规模问题。有时,我会有一个数据集,其中1个条的读数为25000,另一个条的读数为1 当刻度由于另一个读数升高到如此高的位置时,几乎不可能看到,更不用说点击1了 是否可以为任何杆件设置“最小”高度?我知道这可能是困难或奇怪的,因为Y轴缩放 谢谢 在Altair或Vega Lite中,除了修改可能会产生误导的输入数据外,没有办法设置最小条高 也许您可以将另一个图表与共享轴连接起来,并通过共享轴提供交互?

我目前正在生成一个交互式堆叠条形图,在这里,可以单击单个堆叠的条形图来更新其他图形

我遇到的问题是规模问题。有时,我会有一个数据集,其中1个条的读数为25000,另一个条的读数为1

当刻度由于另一个读数升高到如此高的位置时,几乎不可能看到,更不用说点击1了

是否可以为任何杆件设置“最小”高度?我知道这可能是困难或奇怪的,因为Y轴缩放


谢谢

在Altair或Vega Lite中,除了修改可能会产生误导的输入数据外,没有办法设置最小条高

也许您可以将另一个图表与共享轴连接起来,并通过共享轴提供交互?例如:

import pandas as pd
import altair as alt

df = pd.DataFrame({
    'x': list('ABCDE'),
    'y': [1, 2, 3, 10000, 500]
})

selector = alt.selection_single(fields=['x'])
color = alt.condition(selector, alt.value('steelblue'), alt.value('lightgray'))

base = alt.Chart(df).mark_bar().encode(
    color=color
).add_selection(
    selector
)

bars = base.encode(
    x=alt.X('x:N', axis=None),
    y='y:Q',
)

rects = base.encode(
    x='x:N'
)

alt.vconcat(bars, rects).configure_concat(spacing=0)

您可以使用
strokeWidth
绘制边缘:

import altair as alt

import pandas as pd
df = pd.DataFrame(dict(x=["a", "b"], y=[1, 1000]))
select = alt.selection(type="single", fields=["x"], empty="none")
alt.Chart(df).mark_bar(strokeWidth=5).encode(
    y="x",
    x="y",
    fill=alt.condition(select, alt.value("red"), alt.value("blue")),
    stroke=alt.condition(select, alt.value("red"), alt.value("blue")),
).add_selection(select)
如果不想显示笔划,可以设置
strokeOpacity=0.001

import altair as alt

import pandas as pd
df = pd.DataFrame(dict(x=["a", "b"], y=[1, 1000]))
select = alt.selection(type="single", fields=["x"], empty="none")
alt.Chart(df).mark_bar(strokeWidth=5, stroke="red", strokeOpacity=0.001).encode(
    y="x",
    x="y",
    fill=alt.condition(select, alt.value("red"), alt.value("blue")),
).add_selection(select).interactive()

在试图解释数据时,这似乎会产生误导。增加可单击区域的大小而不是增加条的大小是否更有意义?或者,当差距达到某个阈值时,你可以切换到对数刻度。是的,这也是我所想的。这两者之间会产生不和谐,但我想我总是可以生成两者,并可以引用在给定时间更容易使用的任何一个。谢谢你的建议。