altair:更改滑块的位置
altair: change the position of a slider
是否可以更改滑块选择绑定的位置?
无法在 altair 文档或 vega-lite 文档 (https://vega.github.io/vega-lite/docs/bind.html) 中找到内容。
我想向上移动年份滑块,使其更靠近主散点图:
https://vizsim.github.io/pkws_in_D/kba_neuzl_umwelt_fz14_v01.html
在 Altair/Vega-Lite 输出中调整滑块位置的唯一方法是使用 CSS。如果您直接输出 HTML,则可以将 CSS 添加到 HTML 文件中。如果您在 Jupyter 笔记本中显示 Altair 图表,您可以使用 IPython.display
module 添加适当的 CSS.
例如,下面是 US Population Over Time 图表,滑块移到了右上角:
from IPython.display import display, HTML
display(HTML("""
<style>
form.vega-bindings {
position: absolute;
right: 0px;
top: 0px;
}
</style>
"""))
import altair as alt
from vega_datasets import data
source = data.population.url
pink_blue = alt.Scale(domain=('Male', 'Female'),
range=["steelblue", "salmon"])
slider = alt.binding_range(min=1900, max=2000, step=10)
select_year = alt.selection_single(name="year", fields=['year'],
bind=slider, init={'year': 2000})
alt.Chart(source).mark_bar().encode(
x=alt.X('sex:N', title=None),
y=alt.Y('people:Q', scale=alt.Scale(domain=(0, 12000000))),
color=alt.Color('sex:N', scale=pink_blue),
column='age:O'
).properties(
width=20
).add_selection(
select_year
).transform_calculate(
"sex", alt.expr.if_(alt.datum.sex == 1, "Male", "Female")
).transform_filter(
select_year
).configure_facet(
spacing=8
)
您也可以select并使用JS移动它。这是 HTML,滑块有一个单独的列:
<div class="container">
<div class="row">
<div class="col-lg-8">
<h3>Chart</h3>
<div id="vis"></div>
</div>
<div class="col-lg">
<h3>Slider</h3>
<div id="slider">
<div id="oldchildslider"></div>
</div>
</div>
</div>
</div>
现在移动滑块的 JS(使用 spec
从 Altair 示例中提取):
vegaEmbed('#vis', spec).then(function(result) {
const sliders = document.getElementsByClassName('vega-bindings');
const newparent = document.getElementById('slider');
const oldchild = document.getElementById("oldchildslider");
newparent.replaceChild(sliders[0], oldchild);
}).catch(console.error);
Codepen 上的完整代码:https://codepen.io/andyreagan/pen/xxgLwaZ?editors=1010
参考replaceChild
方法:https://developer.mozilla.org/en-US/docs/Web/API/Node/replaceChild
是否可以更改滑块选择绑定的位置?
无法在 altair 文档或 vega-lite 文档 (https://vega.github.io/vega-lite/docs/bind.html) 中找到内容。
我想向上移动年份滑块,使其更靠近主散点图:
https://vizsim.github.io/pkws_in_D/kba_neuzl_umwelt_fz14_v01.html
在 Altair/Vega-Lite 输出中调整滑块位置的唯一方法是使用 CSS。如果您直接输出 HTML,则可以将 CSS 添加到 HTML 文件中。如果您在 Jupyter 笔记本中显示 Altair 图表,您可以使用 IPython.display
module 添加适当的 CSS.
例如,下面是 US Population Over Time 图表,滑块移到了右上角:
from IPython.display import display, HTML
display(HTML("""
<style>
form.vega-bindings {
position: absolute;
right: 0px;
top: 0px;
}
</style>
"""))
import altair as alt
from vega_datasets import data
source = data.population.url
pink_blue = alt.Scale(domain=('Male', 'Female'),
range=["steelblue", "salmon"])
slider = alt.binding_range(min=1900, max=2000, step=10)
select_year = alt.selection_single(name="year", fields=['year'],
bind=slider, init={'year': 2000})
alt.Chart(source).mark_bar().encode(
x=alt.X('sex:N', title=None),
y=alt.Y('people:Q', scale=alt.Scale(domain=(0, 12000000))),
color=alt.Color('sex:N', scale=pink_blue),
column='age:O'
).properties(
width=20
).add_selection(
select_year
).transform_calculate(
"sex", alt.expr.if_(alt.datum.sex == 1, "Male", "Female")
).transform_filter(
select_year
).configure_facet(
spacing=8
)
您也可以select并使用JS移动它。这是 HTML,滑块有一个单独的列:
<div class="container">
<div class="row">
<div class="col-lg-8">
<h3>Chart</h3>
<div id="vis"></div>
</div>
<div class="col-lg">
<h3>Slider</h3>
<div id="slider">
<div id="oldchildslider"></div>
</div>
</div>
</div>
</div>
现在移动滑块的 JS(使用 spec
从 Altair 示例中提取):
vegaEmbed('#vis', spec).then(function(result) {
const sliders = document.getElementsByClassName('vega-bindings');
const newparent = document.getElementById('slider');
const oldchild = document.getElementById("oldchildslider");
newparent.replaceChild(sliders[0], oldchild);
}).catch(console.error);
Codepen 上的完整代码:https://codepen.io/andyreagan/pen/xxgLwaZ?editors=1010
参考replaceChild
方法:https://developer.mozilla.org/en-US/docs/Web/API/Node/replaceChild