Dash 数据可视化与 Plotly 集成
在数据科学和分析领域,数据可视化是一个至关重要的环节,通过可视化,我们可以更直观地理解数据,发现其中的模式和趋势。
Dash 的核心可视化功能依赖于 Plotly,这是一个强大的开源数据可视化库,Plotly 提供了丰富的图表类型和高度可定制的选项,能够轻松创建交互式图表。
Dash 通过 dcc.Graph 组件与 Plotly 无缝集成,用户可以直接在 Dash 应用中嵌入 Plotly 图表。
什么是 Plotly?
Plotly 是一个基于 JavaScript 的开源数据可视化库,支持多种编程语言,包括 Python、R、Julia 等。
Plotly 提供了丰富的图表类型,如折线图、柱状图、散点图、热力图等,并且支持交互功能,如缩放、平移、悬停提示等。
Plotly 特点:
丰富的图表类型:折线图、柱状图、散点图、饼图、热力图、3D 图等。
交互性:支持缩放、平移、悬停提示等交互功能。
高度可定制:可以自定义图表的颜色、布局、注释等。
与 Dash 无缝集成:通过
dcc.Graph
组件直接在 Dash 应用中嵌入 Plotly 图表。
Plotly 的核心优势
- 交互性: Plotly 图表支持丰富的交互功能,用户可以通过鼠标操作与图表进行互动。
- 多样性: Plotly 提供了多种图表类型,适用于不同的数据可视化需求。
- 易用性: Plotly 的 API 设计简洁,易于上手,同时支持高级定制。
Dash 与 Plotly 集成
1、安装 Dash 和 Plotly
在开始之前,我们需要安装 Dash 和 Plotly。可以通过以下命令进行安装:
pip install dash plotly 或 pip3 install dash plotly
dcc.Graph 是 Dash 中用于显示 Plotly 图表的组件。它的核心参数是 figure,用于指定图表的数据和布局。
figure 参数:
data
:图表的数据部分,是一个字典列表,每个字典表示一个数据系列。layout
:图表的布局部分,用于设置标题、坐标轴、图例等。
实例
from dash import dcc, html
import plotly.express as px
# 创建 Dash 应用
app = dash.Dash(__name__)
# 定义布局
app.layout = html.Div([
dcc.Graph(
id='example-graph',
figure={
'data': [{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': '数据1'}],
'layout': {'title': '示例图表'}
}
)
])
# 运行应用
if __name__ == '__main__':
app.run_server(debug=True)
显示效果如下:
2、创建一个简单的 Dash 应用
首先,我们创建一个简单的 Dash 应用,展示一个基本的 Plotly 图表。
实例
from dash import dcc, html
import plotly.express as px
import pandas as pd
# 创建一个示例数据集
df = pd.DataFrame({
"Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
"Amount": [4, 1, 2, 2, 4, 5],
"City": ["SF", "SF", "SF", "NYC", "NYC", "NYC"]
})
# 创建一个 Plotly 图表
fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")
# 初始化 Dash 应用
app = dash.Dash(__name__)
# 定义应用的布局
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''
Dash: A web application framework for Python.
'''),
dcc.Graph(
id='example-graph',
figure=fig
)
])
# 运行应用
if __name__ == '__main__':
app.run_server(debug=True)
代码解析:
- 数据集创建: 我们使用
pandas
创建了一个简单的数据集df
,包含水果、数量和城市信息。 - 图表创建: 使用
plotly.express
的px.bar
函数创建了一个柱状图,展示了不同城市中各种水果的数量。 - Dash 应用布局: 使用
html.Div
和dcc.Graph
定义了应用的布局,其中dcc.Graph
用于嵌入 Plotly 图表。 - 运行应用: 通过
app.run_server(debug=True)
启动应用,并开启调试模式。
显示效果如下:
3、添加交互功能
Dash 的强大之处在于其交互功能,我们可以通过 Dash 的回调机制,动态更新图表内容。
实例
# 更新应用的布局,添加一个下拉菜单
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''
Dash: A web application framework for Python.
'''),
dcc.Dropdown(
id='city-dropdown',
options=[
{'label': 'San Francisco', 'value': 'SF'},
{'label': 'New York City', 'value': 'NYC'}
],
value='SF'
),
dcc.Graph(
id='example-graph',
)
])
# 定义回调函数
@app.callback(
Output('example-graph', 'figure'),
[Input('city-dropdown', 'value')]
)
def update_graph(selected_city):
filtered_df = df[df['City'] == selected_city]
fig = px.bar(filtered_df, x="Fruit", y="Amount", color="City", barmode="group")
return fig
# 运行应用
if __name__ == '__main__':
app.run_server(debug=True)
代码解析:
- 下拉菜单: 添加了一个
dcc.Dropdown
组件,用户可以选择不同的城市。 - 回调函数: 使用
@app.callback
装饰器定义了一个回调函数update_graph
,当用户选择不同的城市时,图表会动态更新。 - 图表更新: 回调函数根据用户选择的城市过滤数据集,并更新图表。
显示效果如下:
Plotly Express
Plotly Express 是 Plotly 的高级接口,能够用极简的代码创建复杂的图表。它非常适合快速原型开发。
常用图表类型
1、折线图 (px.line):
import plotly.express as px df = px.data.iris() fig = px.line(df, x='sepal_width', y='sepal_length', title='折线图示例')
2、柱状图 (px.bar):
fig = px.bar(df, x='species', y='sepal_length', title='柱状图示例')
3、散点图 (px.scatter):
fig = px.scatter(df, x='sepal_width', y='sepal_length', color='species', title='散点图示例')
4、饼图 (px.pie):
fig = px.pie(df, names='species', values='sepal_length', title='饼图示例')
5、热力图 (px.imshow):
import numpy as np data = np.random.rand(10, 10) fig = px.imshow(data, title='热力图示例')
以下是一个完整的 Dash 应用示例,使用 Plotly Express 创建图表:
实例
import plotly.express as px
import pandas as pd
# 创建示例数据
df = pd.DataFrame({
'城市': ['北京', '上海', '广州', '深圳'],
'人口': [2171, 2424, 1490, 1303]
})
# 创建 Dash 应用
app = Dash(__name__)
# 使用 Plotly Express 创建柱状图
fig = px.bar(df, x='城市', y='人口', title='城市人口数据')
# 定义布局
app.layout = html.Div([
dcc.Graph(id='example-graph', figure=fig)
])
# 运行应用
if __name__ == '__main__':
app.run_server(debug=True)
显示如下:
使用 Plotly Graph Objects
Plotly Graph Objects 是 Plotly 的低级接口,提供了更细粒度的控制,适合需要高度定制的场景。
常用图表类型
1、折线图 (go.Scatter):
import plotly.graph_objects as go fig = go.Figure(data=go.Scatter(x=[1, 2, 3], y=[4, 1, 2], mode='lines'))
2、柱状图 (go.Bar):
fig = go.Figure(data=go.Bar(x=['A', 'B', 'C'], y=[10, 20, 30]))
3、散点图 (go.Scatter):
fig = go.Figure(data=go.Scatter(x=[1, 2, 3], y=[4, 1, 2], mode='markers'))
4、饼图 (go.Pie):
fig = go.Figure(data=go.Pie(labels=['A', 'B', 'C'], values=[10, 20, 30]))
以下是一个完整的 Dash 应用示例,使用 Plotly Graph Objects 创建图表:
实例
import plotly.graph_objects as go
# 创建 Dash 应用
app = Dash(__name__)
# 使用 Plotly Graph Objects 创建柱状图
fig = go.Figure(data=go.Bar(x=['北京', '上海', '广州', '深圳'], y=[2171, 2424, 1490, 1303]))
# 设置图表布局
fig.update_layout(title='城市人口数据', xaxis_title='城市', yaxis_title='人口')
# 定义布局
app.layout = html.Div([
dcc.Graph(id='example-graph', figure=fig)
])
# 运行应用
if __name__ == '__main__':
app.run_server(debug=True)
显示如下:
点我分享笔记