Python Panel 库
最后修改于 2025 年 1 月 23 日
Panel 库是一个开源的 Python 库,旨在简化完全在 Python 中构建强大工具、仪表板和复杂应用程序的开发过程。它是 HoloViz 生态系统的一部分,该生态系统提供了一套数据探索工具。
安装 Panel
您可以使用 pip
安装 Panel 库
$ pip install panel
show 和 servable 的区别
show
和 servable
方法是显示 Panel 对象的两种关键方式。
show
方法
- 用途:立即在 Web 浏览器中显示 Panel 对象。
- 场景:非常适合本地开发、快速预览和 Jupyter notebooks。
- 用法:只需在您的 Panel 对象上调用
show
,即可在默认 Web 浏览器中打开它。
servable
方法
- 用途:准备 Panel 对象以供 Panel 服务器提供服务。
- 场景:用于将应用程序部署到服务器环境以供生产使用。
- 用法:在您的 Panel 对象上调用
servable
,然后使用panel serve
命令来提供应用程序。
本质上,使用 show
进行即时本地预览,使用 servable
将应用程序部署到 Web 上进行访问。
用例
- 仪表板:创建交互式和动态仪表板来可视化和探索数据。
- Web 应用程序:开发具有与 Python 代码交互的用户界面的 Web 应用程序。
- 探索性数据分析:构建工具以交互方式快速探索和分析数据集。
- 交互式报告:生成交互式报告,允许用户操作数据并可视化结果。
- 实时监控:设置实时监控仪表板以跟踪实时数据流并可视化更改。
- 自定义 GUI:为科学计算、金融分析和其他应用程序创建自定义图形用户界面。
列布局示例
以下示例演示了如何使用 Panel 库创建具有多个组件的列布局。
import panel as pn pn.extension(design="material") component = pn.panel("an old falcon") layout = pn.Column( component, pn.widgets.IntSlider(value=2, start=0, end=10, name="Value"), pn.pane.HTML("<h1>Title</h1>") ) print(layout) layout.show()
在此示例中,我们导入 Panel 库并使用 Material 设计主题通过 pn.extension(design="material")
初始化它。然后,我们创建了一个包含三个组件的列布局:一个文本面板、一个整数滑块和一个 HTML 面板。pn.Column
函数用于垂直排列这些组件。
行布局
在下一个示例中,我们展示了如何将项目组织成行。我们还为面板应用了一些自定义 CSS。
import panel as pn # Apply the custom CSS custom_css = """ * { background-color: #2e2e2e; color: white; } """ # Apply the custom CSS pn.extension(raw_css=[custom_css]) component1 = pn.panel("Panel 1") component2 = pn.panel("Panel 2") base = pn.FlexBox(flex_direction='column') row1 = pn.Row( component1, component2, pn.pane.HTML("<p>paragraph</p>"), pn.pane.Str( 'This is a raw string that will not be formatted in any way.', ) ) row2 = pn.Row( pn.pane.Markdown("""\ # Wind Turbine A wind turbine is a device that converts the kinetic energy of wind into \ [electrical energy](https://en.wikipedia.org/wiki/Electrical_energy). Read more [here](https://en.wikipedia.org/wiki/Wind_turbine). """) ) base.append(row1) base.append(row2) base.show()
自定义 CSS 被定义为为主所有元素设置深色背景和白色文本。pn.extension(raw_css=[custom_css])
方法将此 CSS 应用于整个应用程序。然后,创建了几个 Panel 组件,包括作为基本面板的 component1 和 component2、一个带有段落的 HTML 面板以及一个原始字符串面板。这些组件使用 pn.Row
排列成行,以创建结构化的布局。
第 1 行包含 component1、component2、一个 HTML 段落和一个原始字符串,而第 2 行包含一个关于风力涡轮机的 Markdown 面板。这些行被添加到具有列布局的 pn.FlexBox
中,它作为应用程序的主容器。最后,base.show
在 Web 浏览器中启动应用程序。结果是一个具有深色主题和组织内容的 Web 应用程序,演示了 Panel 的灵活性和样式设置功能。
DataFrame 示例
以下示例演示了如何在 Panel 应用程序中显示 Pandas DataFrame。
import pandas as pd import panel as pn pn.extension() data = {'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8], 'C': [9, 10, 11, 12]} df = pd.DataFrame(data) table = pn.widgets.DataFrame(df, name='DataFrame Viewer') table.width = 400 table.height = 350 app = pn.Column("# DataFrame Viewer", table) app.show()
在此示例中,我们导入 Panel 和 Pandas 库,并使用 pn.extension
初始化 Panel。然后,我们创建一个包含一些示例数据的 DataFrame,并使用 pn.widgets.DataFrame
函数创建一个表格小部件。我们设置了表格的宽度和高度,并创建了一个带有标题和表格的列布局。最后,我们使用 show
方法显示布局。
FloatSlider
此示例演示了如何创建一个带有滑块和文本显示的简单 Panel 应用程序。
import panel as pn slider = pn.widgets.FloatSlider(name='Slider', start=0, end=10) text = pn.pane.Str('Slider value: 0') def update_text(event): text.object = f'Slider value: {event.new}' slider.param.watch(update_text, 'value') app = pn.Column(slider, text) app.show()
该示例创建了一个简单的交互式 Web 应用程序,其中包含一个浮点滑块和一个文本显示。FloatSlider
小部件允许用户在 0 到 10 之间选择一个值。最初,text
面板显示“Slider value: 0”。当滑块的值发生变化时,update_text
函数会更新文本面板以显示当前的滑块值。
watch
方法将 update_text
函数附加到滑块的“value”参数,确保文本动态更新。最后,pn.Column
将滑块和文本组织成垂直布局。
app.show
会立即在 Web 浏览器中启动 Panel 应用程序,显示浮点滑块和文本面板。
交互式绘图
此示例展示了如何使用 Panel 和 Matplotlib 创建交互式绘图。
import panel as pn import matplotlib.pyplot as plt import numpy as np pn.extension() def plot_sine(frequency): x = np.linspace(0, 2 * np.pi, 100) y = np.sin(frequency * x) plt.figure() plt.plot(x, y) plt.title(f'Sine Wave with Frequency {frequency}') return plt.gcf() frequency_slider = pn.widgets.FloatSlider(name='Frequency', start=1, end=10, value=1) interactive_plot = pn.bind(plot_sine, frequency=frequency_slider) app = pn.Column(frequency_slider, interactive_plot) app.servable()
此示例演示了如何使用 Panel 库创建交互式 Web 应用程序,以可视化具有不同频率的正弦波。plot_sine
函数使用 Matplotlib 和 NumPy 根据提供的频率生成正弦波图。
一个名为 frequency_slider
的 FloatSlider
小部件允许用户在 1 到 10 之间调整正弦波频率。pn.bind
函数将滑块的值绑定到 plot_sine 函数,确保在调整滑块时图会自动更新。pn.Column
函数将滑块和交互式图垂直排列。
交互式数据获取和显示
下一个示例说明了如何使用 Panel 库创建交互式 Web 应用程序,以从提供的 JSON URL 获取和显示数据。
import panel as pn import requests import pandas as pd pn.extension() def load_data(event): url = text_input.value response = requests.get(url) data = response.json() df = pd.DataFrame(data) table.object = df text_input = pn.widgets.TextInput(name='JSON URL', value='https://jsonplaceholder.typicode.com/users') button = pn.widgets.Button(name='Load Data', button_type='primary') button.on_click(load_data) table = pn.pane.DataFrame(pd.DataFrame(), sizing_mode='stretch_width') app = pn.Column(pn.Row(text_input, button), table) app.show()
load_data
函数从 TextInput 小部件中输入的 URL 中检索数据,将其转换为 pandas DataFrame,并更新表格面板。该应用程序包含一个用于用户输入 JSON URL 的 TextInput
小部件,一个用于触发数据加载的 Button
小部件,以及一个用于显示获取数据的 DataFrame
面板。
该布局以列格式排列这些组件,app.show
在 Web 浏览器中启动应用程序,提供了一个用户友好的界面来与远程数据进行交互。
来源
在本文中,我们探讨了 Python Panel 库,并通过实际示例展示了其功能。
作者
列出所有 Python 教程。