使用Vega-Lite库显示图表。
Vega-Lite 是一种用于定义交互式图形的高级语法。
| 函数签名[source] | |
|---|---|
st.vega_lite_chart(data=None, spec=None, *, use_container_width=False, theme="streamlit", key=None, on_select="ignore", selection_mode=None, **kwargs) | |
| 参数 | |
data (Anything supported by st.dataframe) | 要绘制的数据或包含数据的Vega-Lite规范(更接近Vega-Lite API)。 |
spec (dict or None) | 图表的Vega-Lite规范。如果spec为None(默认值), Streamlit将使用data中传递的规范。您不能同时向data和spec传递规范。更多信息请参见 https://vega.github.io/vega-lite/docs/。 |
use_container_width (bool) | 是否用父容器的宽度覆盖图形的原生宽度。如果use_container_width是False (默认),Streamlit会根据绘图库设置图表的宽度以适应其内容,直到父容器的宽度。如果use_container_width是True,Streamlit会将图形的宽度设置为与父容器的宽度匹配。 |
theme ("streamlit" 或 None) | 图表的主题。如果 theme 是 "streamlit"(默认值), Streamlit 使用其自己的设计默认值。如果 theme 是 None, Streamlit 回退到库的默认行为。 |
key (str) | 一个可选的字符串,用于给这个元素一个稳定的身份。如果 key 是 None(默认值),这个元素的身份将基于其他参数的值来确定。 此外,如果启用了选择并且提供了 key,Streamlit 将在会话状态中注册该键以存储选择状态。选择状态是只读的。 |
on_select ("ignore", "rerun", or callable) | 图表应如何响应用户选择事件。这控制图表是否表现得像一个输入小部件。on_select 可以是以下之一:
要使用选择事件,data 或 spec 中定义的 Vega-Lite 规范必须包括来自图表库的选择参数。要了解如何在 Vega-Lite 中定义交互,请参阅 Vega-Lite 文档中的Dynamic Behaviors with Parameters。 |
selection_mode (str or Iterable of str) | Streamlit 应使用的选择参数。如果 selection_mode 为 None(默认),Streamlit 将使用图表 Vega-Lite 规范中定义的所有 选择参数。 当 Streamlit 使用选择参数时,来自该 参数的选择将触发重新运行并包含在选择 状态中。当 Streamlit 不使用选择参数时, 来自该参数的选择将不会触发重新运行,也不会 包含在选择状态中。 选择参数由其 name 属性标识。 |
**kwargs (any) | 作为关键字的图表的Vega-Lite规范。这是spec的替代方案。 |
| 返回 | |
(element or dict) | 如果 on_select 是 "ignore"(默认值),此命令返回一个 用于图表元素的内部占位符,可以与 .add_rows() 方法一起使用。否则,此命令返回一个 类似字典的对象,支持键和属性 表示法。属性由 VegaLiteState 字典模式描述。 |
示例
import streamlit as st import pandas as pd import numpy as np chart_data = pd.DataFrame(np.random.randn(200, 3), columns=["a", "b", "c"]) st.vega_lite_chart( chart_data, { "mark": {"type": "circle", "tooltip": True}, "encoding": { "x": {"field": "a", "type": "quantitative"}, "y": {"field": "b", "type": "quantitative"}, "size": {"field": "c", "type": "quantitative"}, "color": {"field": "c", "type": "quantitative"}, }, }, )可以在https://vega.github.io/vega-lite/examples/找到不使用Streamlit的Vega-Lite使用示例。大多数示例都可以轻松转换为上面显示的语法。
Chart selections
| 属性 | |
selection (dict) | on_select 事件的状态。此属性返回一个类似字典的对象,支持键和属性表示法。 每个 Vega-Lite 选择参数的名称成为 selection 字典中的一个属性。每个属性中数据的格式由 Vega-Lite 中的选择参数定义决定。 |
示例
以下两个示例具有等效的定义。每个示例都包含一个点和区间选择参数,这些参数包含在图表定义中。点选择参数名为"point_selection"。区间或框选择参数名为"interval_selection"。
以下示例使用 st.altair_chart:
import streamlit as st
import pandas as pd
import numpy as np
import altair as alt
if "data" not in st.session_state:
st.session_state.data = pd.DataFrame(
np.random.randn(20, 3), columns=["a", "b", "c"]
)
df = st.session_state.data
point_selector = alt.selection_point("point_selection")
interval_selector = alt.selection_interval("interval_selection")
chart = (
alt.Chart(df)
.mark_circle()
.encode(
x="a",
y="b",
size="c",
color="c",
tooltip=["a", "b", "c"],
fillOpacity=alt.condition(point_selector, alt.value(1), alt.value(0.3)),
)
.add_params(point_selector, interval_selector)
)
event = st.altair_chart(chart, key="alt_chart", on_select="rerun")
event
以下示例使用 st.vega_lite_chart:
import streamlit as st
import pandas as pd
import numpy as np
if "data" not in st.session_state:
st.session_state.data = pd.DataFrame(
np.random.randn(20, 3), columns=["a", "b", "c"]
)
spec = {
"mark": {"type": "circle", "tooltip": True},
"params": [
{"name": "interval_selection", "select": "interval"},
{"name": "point_selection", "select": "point"},
],
"encoding": {
"x": {"field": "a", "type": "quantitative"},
"y": {"field": "b", "type": "quantitative"},
"size": {"field": "c", "type": "quantitative"},
"color": {"field": "c", "type": "quantitative"},
"fillOpacity": {
"condition": {"param": "point_selection", "value": 1},
"value": 0.3,
},
},
}
event = st.vega_lite_chart(
st.session_state.data, spec, key="vega_chart", on_select="rerun"
)
event
尝试在这个交互式示例中选择点。当你点击一个点时,选择将出现在属性"point_selection"下,这是给点选择参数的名称。同样地,当你进行区间选择时,它将出现在属性"interval_selection"下。如果需要,你可以给你的选择参数其他名称。
如果您在选择点时按住Shift键,现有的点选择将被保留。在进行额外选择时,区间选择不会被保留。
| 函数签名[来源] | |
|---|---|
element.add_rows(data=None, **kwargs) | |
| 参数 | |
data (pandas.DataFrame, pandas.Styler, pyarrow.Table, numpy.ndarray, pyspark.sql.DataFrame, snowflake.snowpark.dataframe.DataFrame, Iterable, dict, or None) | 要连接的表格。可选。 |
**kwargs (pandas.DataFrame, numpy.ndarray, Iterable, dict, or None) | 要连接的有名称的数据集。可选。你只能传入1个数据集(包括在data参数中的那个)。 |
示例
import streamlit as st import pandas as pd import numpy as np df1 = pd.DataFrame( np.random.randn(50, 20), columns=("col %d" % i for i in range(20)) ) my_table = st.table(df1) df2 = pd.DataFrame( np.random.randn(50, 20), columns=("col %d" % i for i in range(20)) ) my_table.add_rows(df2) # Now the table shown in the Streamlit app contains the data for # df1 followed by the data for df2.你可以对图表做同样的事情。例如,如果你想在折线图中添加更多数据:
# Assuming df1 and df2 from the example above still exist... my_chart = st.line_chart(df1) my_chart.add_rows(df2) # Now the chart shown in the Streamlit app contains the data for # df1 followed by the data for df2.对于数据集已命名的图表,您可以使用关键字参数传递数据,其中键是名称:
my_chart = st.vega_lite_chart( { "mark": "line", "encoding": {"x": "a", "y": "b"}, "datasets": { "some_fancy_name": df1, # <-- named dataset }, "data": {"name": "some_fancy_name"}, } ) my_chart.add_rows(some_fancy_name=df2) # <-- name used as keyword
Theming
Vega-Lite 图表默认使用 Streamlit 主题显示。该主题简洁、用户友好,并融入了 Streamlit 的调色板。额外的好处是,您的图表可以更好地与应用程序的其他设计部分集成。
Streamlit 主题从 Streamlit 1.16.0 开始通过 theme="streamlit" 关键字参数提供。要禁用它并使用 Vega-Lite 的原生主题,请改用 theme=None。
让我们看一下使用Streamlit主题和原生Vega-Lite主题的图表示例:
import streamlit as st
from vega_datasets import data
source = data.cars()
chart = {
"mark": "point",
"encoding": {
"x": {
"field": "Horsepower",
"type": "quantitative",
},
"y": {
"field": "Miles_per_Gallon",
"type": "quantitative",
},
"color": {"field": "Origin", "type": "nominal"},
"shape": {"field": "Origin", "type": "nominal"},
},
}
tab1, tab2 = st.tabs(["Streamlit theme (default)", "Vega-Lite native theme"])
with tab1:
# Use the Streamlit theme.
# This is the default. So you can also omit the theme argument.
st.vega_lite_chart(
source, chart, theme="streamlit", use_container_width=True
)
with tab2:
st.vega_lite_chart(
source, chart, theme=None, use_container_width=True
)
点击下面交互式应用程序中的标签,查看启用和禁用Streamlit主题的图表。
如果你在担心你自己的自定义设置是否仍然会被考虑,不用担心!你仍然可以更改你的图表配置。换句话说,尽管我们现在默认启用了Streamlit主题,但你可以用自定义颜色或字体覆盖它。例如,如果你想让图表线条变成绿色而不是默认的红色,你可以做到!
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。