- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
Steamlit虽然也自带了一些绘图组件(比如折线图,柱状图和散点图等等),但是都比较简单, 。
和Python传统的可视化库比起来,功能上差了很多.
本篇介绍如何在Streamlit App中使用Matplotlib库来绘图.
st.pyplot函数专门用于在Steamlit应用中显示 Matplotlib 绘制的图形.
这个函数能够直接将Matplotlib Figure对象直接渲染到页面的指定位置上.
st.pyplot的参数不多,主要有:
名称 | 类型 | 说明 |
---|---|---|
fig | Figure对象 | 要渲染的 Matplotlib Figure 对象 |
clear_figure | bool | 控制图形渲染后是否清除 |
use_container_width | bool | 决定是否使用父容器的宽度覆盖图形的原始宽度 |
最重要的就是fig参数,它是通过 Matplotlib 的常规绘图方式创建图形对象.
也就是说,我们绘制图形时,完全不用考虑Streamlit,正常使用Matplotlib来绘图, 。
绘制之后直接将Matplotlib的fig对象传给st.pyplot函数即可.
在使用 Matplotlib 与 Streamlit 结合时,可能会遇到一些兼容性问题.
Matplotlib 支持多种 Backend,如果在使用过程中出现错误,可以尝试将Backend设置为TkAgg.
具体的设置方法如下:
~/.matplotlib/matplotlibrc
文件,如果不存在就创建一个backend: TkAgg
如果是windows系统,上面的文件路径改为:C:\Users\%username%\.matplotlib\matplotlibrc 。
此外,Matplotlib 在多线程环境下可能会出现问题,因为它本身对线程的支持并不完善.
当部署和共享应用程序时,由于可能存在并发用户,这个问题可能会更加突出.
为了解决这个问题,建议使用RendererAgg.lock来包裹 Matplotlib 相关代码,如下所示:
from matplotlib.backends.backend_agg import RendererAgg
_lock = RendererAgg.lock
with _lock:
fig.title('sample figure')
fig.plot([1,20,3,50])
st.pyplot(fig)
下面通过两个根据实际情况简化的示例来演示两者结合的效果.
这个示例中,我们使用 np.random 函数生成了包含三列不同类型随机数据的 DataFrame.
在数据分析与可视化部分,根据选择的列进行不同类型的绘图操作, 。
Column1
或 Column2
时绘制柱状图或直方图Column3
时可选择绘制 Column1
和 Column2
的散点图本示例主要展示了 Streamlit 与 Matplotlib 结合在数据探索和分析可视化方面的便利性与交互性.
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import matplotlib
# 为了显示中文
matplotlib.rcParams["font.sans-serif"] = ["Microsoft YaHei Mono"]
matplotlib.rcParams["axes.unicode_minus"] = False
# 生成随机数据
@st.cache_data
def generate_data():
# 生成 100 行 3 列的随机数据
data = {
"Column1": np.random.randint(1, 100, 100),
"Column2": np.random.normal(50, 10, 100),
"Column3": np.random.choice(["A", "B", "C"], 100),
}
return pd.DataFrame(data)
data = generate_data()
# 数据探索部分
st.subheader("数据探索")
st.write(data.head())
# 数据分析与可视化
st.subheader("数据分析与可视化")
# 选择分析的列
selected_column = st.selectbox("选择要分析的列", data.columns)
# 使用 Matplotlib 绘制柱状图
if selected_column in ["Column1", "Column2"]:
fig, ax = plt.subplots()
if selected_column == "Column1":
sns.countplot(data=data, x=selected_column, ax=ax)
else:
sns.histplot(data=data, x=selected_column, kde=True, ax=ax)
ax.set_title(f"{selected_column} 分布情况")
ax.set_xlabel(selected_column)
ax.set_ylabel("数量")
st.pyplot(fig)
# 绘制散点图(以 Column1 和 Column2 为例)
elif selected_column == "Column3":
if st.checkbox("显示散点图"):
fig2, ax2 = plt.subplots()
ax2.scatter(data["Column1"], data["Column2"])
ax2.set_title("Column1 与 Column2 的关系")
ax2.set_xlabel("Column1")
ax2.set_ylabel("Column2")
st.pyplot(fig2)
运行效果:
在这个数据监控与报告应用示例中,通过get_live_data 函数模拟获取实时数据(实际应用中可替换为真实的数据获取逻辑).
然后通过一个循环,不断获取新数据并合并到总的数据集中,再使用 Matplotlib 绘制折线图展示数据随时间的变化趋势.
这样就构建了一个简单的实时数据监控应用,在实际业务场景中,例如监控服务器性能指标、生产线上的关键数据等,可以让相关人员实时直观地了解数据的变化情况,及时发现异常并做出决策.
import streamlit as st
import matplotlib.pyplot as plt
import time
import random
import pandas as pd
import matplotlib
# 为了显示中文
matplotlib.rcParams["font.sans-serif"] = ["Microsoft YaHei Mono"]
matplotlib.rcParams["axes.unicode_minus"] = False
# 模拟获取实时数据的函数
def get_live_data():
# 这里可以替换为真实的获取数据逻辑,比如从数据库或 API 获取
new_data = pd.DataFrame(
{
"time": [time.strftime("%H:%M:%S")],
"value": [random.randint(-10, 10)],
}
)
return new_data
# 初始化数据
data = pd.DataFrame(columns=["time", "value"])
# 实时数据监控应用标题
st.title("实时数据监控")
# 创建一个占位符用于更新图表
chart_placeholder = st.empty()
while True:
# 获取新数据
new_data = get_live_data()
# 合并新数据到总数据
data = pd.concat([data, new_data], ignore_index=True)
# 使用 Matplotlib 绘制折线图
fig, ax = plt.subplots()
ax.plot(data["time"], data["value"])
ax.set_title("实时数据趋势")
ax.set_xlabel("时间")
ax.set_ylabel("数值")
ax.set_xticklabels(data["time"], rotation=45)
# 在 Streamlit 中更新图表
chart_placeholder.pyplot(fig)
# 每隔一段时间更新数据(这里设置为 2 秒)
time.sleep(2)
运行效果:
Streamlit 与 Matplotlib 结合的关键点在于,Streamlit 提供便捷的应用构建框架,Matplotlib 专注强大的绘图功能,二者通过 st.pyplot 函数紧密相连.
在数据处理流程上,可先在 Matplotlib 中依据数据特性灵活创建各类图形对象,再借助 Streamlit 整合进应用.
它们结合的优势也非常明显,首先,在可视化效率方面,能快速将 Matplotlib 绘制的图形嵌入 Streamlit 应用,减少开发时间与代码量.
其次,在交互性上,Streamlit 的丰富交互组件可与 Matplotlib 图形联动,如通过按钮、滑块等控制图形展示内容或范围,让用户更方便的进行数据探索.
最后此篇关于『玩转Streamlit』--集成Matplotlib的文章就讲到这里了,如果你想了解更多关于『玩转Streamlit』--集成Matplotlib的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
当我尝试将 streamlit 部署到 heroku 时,出现以下错误。我该如何解决? 没有名为 streamlit.main 的模块; ‘streamlit’是一个包,不能直接执行 最佳答案 我试过
我正在使用带有 streamlit 的简单 ML 模型。它在 conda 环境中的本地机器上运行良好,但当我尝试将其部署到 share.streamlit.io 时,它显示错误安装要求。 错误信息如下
我想使用 docker 来容器化 nginx、fastapi 和 2 个 streamlit 应用程序。所有 3 个应用程序(fastapi、2streamlit 应用程序)都不会相互交互。 Ngin
Is there a way in Streamlit to:Streamlight中是否有方法: Select text in a text area选择文本区域中的文本 Cl
我正在尝试从同一目录中的本地系统上传图像。上传后,当我通过打开的 cv 拆分和合并 b、g 和 r 颜色时,我收到错误 ValueError:没有足够的值来解压(预期 3,得到 0) 错误: 这是显示
我想创建一个简单的流线型应用程序,当您按下按钮时,它会增加 x 并显示 x 的新值。 但是,它仅适用于第一次“x 仅显示值 2 且不增加” import streamlit as st x = 1 i
我一直在尝试使用 streamlit 创建一个网络仪表板。运行一个片段后的错误是,“There are multiple identical st.button widgets with the sa
我使用 2 个不同的 radio 选项来执行不同的任务。我想从一捕获图像,然后稍后在选项 2 中执行一些操作。当我在 my_image(在选项 1 中)中存储一帧后尝试将单选选项更改为 2 时,出现s
有谁知道我是否可以使用 streamlit_chat 消息在 Streamlit 中显示类似 chatgpt 的流响应? 我需要类似 message(streaming=True) 或任何其他替代方案
已关闭。这个问题是 not about programming or software development 。目前不接受答案。 这个问题似乎不是关于 a specific programming
有谁知道我是否可以使用 streamlit_chat 消息在 Streamlit 中显示类似 chatgpt 的流响应? 我需要类似 message(streaming=True) 或任何其他替代方案
已关闭。这个问题是 not about programming or software development 。目前不接受答案。 这个问题似乎不是关于 a specific programming
我正在用子图绘制图像,它在 Jupyter(或“纯 python”)和 Streamlit 中看起来不同。 例如,如果我有一个只有1 张图像 的(2 x 2) 子图,它将在 Streamlit 中被拉
嗨,过去几天我一直在尝试在 azure 中部署 Streamlit 应用程序。一个简单的应用程序,例如 import streamlit as st def main(): st.wr
我是 Streamlit 的新手。我想进行多项选择用户输入(复选框)。但我想从 4 个选项中最多选择 3 个选项。 我已经尝试过 multiselect 的下拉功能. import streamlit
我的应用程序中有一个按钮,我想在用户单击它时设置它的样式。问题在于,因为 Streamlit 不允许我们向我们创建的对象发布类,所以我需要找到一种方法来以稳健且与版本无关的方式指定确切的按钮。这是按钮
我正在处理一个机器学习项目,我想(相对)实时地显示具有适应度函数的图表。 我正在使用 this SO answer 中的代码只要图表显示在 matplotlib 窗口中,它就可以正常工作。一旦我将其添
我的应用程序中有一个按钮,我想在用户单击它时设置它的样式。问题在于,因为 Streamlit 不允许我们向我们创建的对象发布类,所以我需要找到一种方法来以稳健且与版本无关的方式指定确切的按钮。这是按钮
我正在尝试使用 启动 Streamlit 应用程序 import os os.popen("streamlit run stockXchange.py") 当我运行这段代码时,会出现无限多的流光窗口,
全部, 我以前成功使用过多选,但是当我尝试这个我作为 POC 尝试的特定示例时,行为非常奇怪。本质上,我想要做的是使用多选让应用程序在中间步骤等待用户输入。但是,multiselect 不会等我选择我
我是一名优秀的程序员,十分优秀!