你可以通过 Streamlit 与多个可视化库的集成,在应用中展示丰富的图表,并利用 Streamlit 的动态交互功能实现图表的动态更新。下面是一些使用 Streamlit 展示各种图表并实现动态效果的示例,分别使用不同的可视化库如 Matplotlib、Plotly、Altair 和 Bokeh。
官网链接
访问
1. Matplotlib 动态图表示例
Matplotlib
是一个强大的 Python 绘图库,适用于静态图表。你可以通过 Streamlit 的动态控件,如滑动条或按钮,来更新图表的内容。
代码示例:
import streamlit as st
import matplotlib.pyplot as plt
import numpy as np
st.title("Dynamic Matplotlib Chart")
# 动态滑块控制图表内容
x_range = st.slider("Select range of x", 1, 100, (10, 50))
# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 动态更新 x 轴范围
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlim(x_range[0], x_range[1])
# 展示图表
st.pyplot(fig)
2. Plotly 动态图表示例
Plotly
支持交互式图表,允许缩放、悬停查看详细信息等。它与 Streamlit 无缝集成,非常适合动态展示数据。
代码示例:
import streamlit as st
import plotly.express as px
import numpy as np
st.title("Dynamic Plotly Chart")
# 动态滑块控制数据生成
n_points = st.slider("Number of points", min_value=10, max_value=500, value=100)
# 生成动态数据
x = np.random.randn(n_points)
y = np.random.randn(n_points)
# 使用 Plotly 生成散点图
fig = px.scatter(x=x, y=y, labels={'x': 'X Axis', 'y': 'Y Axis'}, title="Random Scatter Plot")
# 展示动态 Plotly 图表
st.plotly_chart(fig)
3. Altair 动态图表示例
Altair
是一个声明式的图表库,允许你通过简单的语法生成可交互的图表。适用于数据科学和数据分析领域。
代码示例:
import streamlit as st
import altair as alt
import pandas as pd
import numpy as np
st.title("Dynamic Altair Chart")
# 动态生成数据
x = np.arange(100)
y = np.random.randn(100)
data = pd.DataFrame({"x": x, "y": y})
# Altair 图表
chart = alt.Chart(data).mark_line().encode(
x='x',
y='y'
).properties(
title="Dynamic Altair Line Chart"
)
# 动态滑块更新数据范围
range_x = st.slider("Select x-axis range", 0, 100, (10, 90))
# 过滤数据
filtered_data = data[(data["x"] >= range_x[0]) & (data["x"] <= range_x[1])]
# 更新图表
st.altair_chart(chart.encode(x=alt.X('x', scale=alt.Scale(domain=range_x))), use_container_width=True)
4. Bokeh 动态图表示例
Bokeh
是一个灵活且功能丰富的交互式可视化库,适用于构建复杂的动态图表。
代码示例:
import streamlit as st
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
import numpy as np
st.title("Dynamic Bokeh Chart")
# 动态滑块
num_points = st.slider("Number of points", min_value=10, max_value=200, value=50)
# 生成随机数据
x = np.linspace(0, 10, num_points)
y = np.sin(x)
# Bokeh 图表
source = ColumnDataSource(data=dict(x=x, y=y))
p = figure(title="Dynamic Bokeh Sine Wave", x_axis_label='x', y_axis_label='y')
p.line('x', 'y', source=source, line_width=2)
# 展示 Bokeh 图表
st.bokeh_chart(p)
5. 动态条形图(Bar Chart)示例
可以通过 st.bar_chart
实现简单的动态条形图。例如,使用动态滑块生成更新的随机数据,并实时展示变化。
代码示例:
import streamlit as st
import numpy as np
import pandas as pd
st.title("Dynamic Bar Chart")
# 动态滑块控制数据
num_bars = st.slider("Number of bars", min_value=3, max_value=15, value=5)
# 生成随机数据
data = pd.DataFrame({
'category': [f'Category {i}' for i in range(num_bars)],
'value': np.random.randint(1, 100, num_bars)
})
# 展示动态条形图
st.bar_chart(data.set_index('category'))
6. 动态折线图(Line Chart)示例
Streamlit 提供了简单的 st.line_chart()
函数,可以用于实时更新和展示动态折线图。
代码示例:
import streamlit as st
import numpy as np
import pandas as pd
st.title("Dynamic Line Chart")
# 动态滑块控制数据点数量
num_points = st.slider("Number of points", min_value=10, max_value=100, value=50)
# 生成随机数据
data = pd.DataFrame(np.random.randn(num_points, 2), columns=['A', 'B'])
# 展示动态折线图
st.line_chart(data)
总结:
以上代码展示了如何使用多种可视化库(Matplotlib、Plotly、Altair、Bokeh)以及 Streamlit 自带的图表功能(Bar Chart、Line Chart)来实现图表的动态更新。你可以根据需求选择不同的库来丰富 Streamlit 应用的可视化效果,并且通过 Streamlit 的交互组件(如滑块、文本框等)实现数据的动态更新。
这些图表均支持在 Streamlit 中的实时交互,让用户能够通过输入控件与图表互动,改变显示的数据或图表的形式。