我目前正在生成一个交互式的堆叠条形图,可以在其中单击条形图的各个堆栈以更新其他图形。
我遇到的问题是规模问题。有时,我会有一个数据集,其中1条的读数为25,000,另一条的读数为1。
当刻度由于另一个读数而变得如此之高时,几乎看不到(更不用说单击)条目1了。
是否可以为任何条形块设置“最小”高度?我知道由于Y轴缩放,这可能很困难或很奇怪。
谢谢!
答案 0 :(得分:0)
没有办法在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)
答案 1 :(得分: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()