1.【matplotlib基础】--画布
2.【matplotlib基础】--子图
3.【matplotlib基础】--坐标轴
4.【matplotlib基础】--刻度
5.【matplotlib基础】--图例
6.【matplotlib基础】--文本标注
7.【matplotlib基础】--绘图配置
8.【matplotlib基础】--样式表
9.【matplotlib基础】--手绘风格
10.【matplotlib基础】--几何图形
11.【matplotlib基础】--动画
12.【matplotlib基础】--3D图形
13.【matplotlib基础】--结合地图
14.【matplotlib 实战】--面积图
15.【matplotlib 实战】--折线图
16.【matplotlib 实战】--堆叠面积图
17.【matplotlib 实战】--堆叠柱状图
18.【matplotlib 实战】--直方图
19.【matplotlib 实战】--柱状图
20.【matplotlib 实战】--平行坐标系
21.【matplotlib 实战】--雷达图
22.【matplotlib 实战】--热力图
23.【matplotlib 实战】--漏斗图
24.【matplotlib 实战】--气泡图
25.【matplotlib 实战】--散点图
26.【matplotlib 实战】--南丁格尔玫瑰图
27.【matplotlib 实战】--饼图
28.【matplotlib 实战】--百分比柱状图
29.【matplotlib 实战】--箱型图
30.『Plotly实战指南』--架构与设计理念
31.『Plotly实战指南』--绘图初体验
32.『Plotly实战指南』--折线图绘制基础篇
33.『Plotly实战指南』--折线图绘制进阶篇
34.『Plotly实战指南』--柱状图绘制基础篇
35.『Plotly实战指南』--柱状图绘制高级篇
36.『Plotly实战指南』--饼图绘制基础篇
37.
『Plotly实战指南』--饼图绘制高级篇
38.『Plotly实战指南』--散点图绘制进阶篇
39.『Plotly实战指南』--箱线图绘制与应用
40.『Plotly实战指南』--直方图绘制与应用
41.『Plotly实战指南』--面积图绘制与应用
42.『Plotly实战指南』--雷达图绘制与应用
43.『Plotly实战指南』--布局基础篇
44.『Plotly实战指南』--布局进阶篇
45.『Plotly实战指南』--样式定制基础篇
46.『Plotly实战指南』--样式定制高级篇
47.『Plotly实战指南』--交互功能基础篇
48.『Plotly实战指南』--交互功能进阶篇
49.『Plotly实战指南』--在金融数据可视化中的应用(上)
50.『Plotly实战指南』--在金融数据可视化中的应用(下)
51.『Plotly实战指南』--在科学数据可视化中的应用(上)
52.『Plotly实战指南』--在科学数据可视化中的应用(下)
53.『Plotly实战指南』--Plotly与Pandas的深度融合
54.『Plotly实战指南』--Plotly与Streamlit结合实战
在数据可视化的世界里,饼图是最直观的展示比例关系的工具之一。
然而,传统的静态饼图已经无法满足现代数据分析的需求。Plotly
作为一款强大的可视化库,不仅提供了饼图丰富的基础功能,还支持交互效果和动态更新等高级特性。
本文我们将深入探讨Plotly
在饼图绘制上的高级功能,包括交互效果和动态更新等技巧。
这些功能在以下场景中尤为重要:
- 仪表盘交互:用户需要通过点击、悬停等操作深入了解数据
- 数据探索工具:动态更新帮助用户实时分析不同数据集
- 动态报告展示:动态交互性让报告更具吸引力和专业性
饼图交互效果
点击分离切片
Plotly
允许我们通过点击切片实现分离效果,增强用户与图表的交互体验。
但是,为了实现点击切片分离的效果,需要使用Plotly
的事件处理机制,通常结合Dash
框架来实现。
import dash
from dash import dcc, html, Input, Output, State
import plotly.graph_objects as go
app = dash.Dash(__name__)
# 基础数据
labels = ["A", "B", "C", "D"]
values = [25, 20, 30, 25]
pull = [0, 0, 0, 0] # 初始状态无偏移
app.layout = html.Div(
[
dcc.Graph(
id="interactive-pie-chart",
figure={
"data": [
go.Pie(
labels=labels,
values=values,
pull=pull,
textinfo="percent+label",
insidetextorientation="radial",
marker=dict(line=dict(color="#000000", width=2)),
)
]
},
clickData=None, # 初始点击数据
),
html.Div(id="output-container"),
]
)
@app.callback(
Output("interactive-pie-chart", "figure"),
Input("interactive-pie-chart", "clickData"),
State("interactive-pie-chart", "figure"),
)
def update_pull(clickData, figure):
"""更新点击切片的偏移量"""
if clickData:
point = clickData["points"][0]
index = labels.index(point["label"])
# 更新pull数组
new_pull = [0.1 if i == index else 0 for i in range(len(values))]
# 更新图表
figure["data"][0]["pull"] = new_pull
figure["data"][0]["marker"]["colors"] = [
"#ff9999" if i == index else "#636efa" for i in range(len(values))
]
return figure
if __name__ == "__main__":
app.run(debug=True)
运行效果:
其中,代码主要涉及的内容包括:
- Dash框架:使用
Dash
框架来创建交互式Web
应用。 - clickData:用于捕获用户点击事件的数据。它包含点击切片的详细信息
- 回调函数:
@callback
装饰器,监听图表的点击事件。点击切片时,回调函数会被触发 - 更新pull属性:在回调函数中,根据点击的切片索引更新
pull
数组,从而实现切片分离效果 - 高亮显示:通过更新
marker.colors
属性,使被点击的切片高亮显示
悬停提示
悬停效果是提升用户体验的关键,Plotly
提供了强大的自定义能力。
使用%{variable}
语法映射数据字段,通过customdata
传递额外信息,同时结合hovertemplate
实现复杂提示。
# 创建饼图
fig = go.Figure(
data=[
go.Pie(
labels=["A", "B", "C"],
values=[30, 40, 30],
customdata=["上升", "下降", "上升"],
),
]
)
fig.update_traces(
hovertemplate="类别: %{label}<br>"
+ "数值: %{value}<br>"
+ "占比: %{percent}<br>"
+ "趋势: %{customdata}<extra></extra>"
)
动态饼图
动态更新是现代数据可视化的核心能力,Plotly
结合Dash
框架可以轻松实现。
import dash
from dash import dcc, html, Input, Output
import plotly.graph_objects as go
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Input(id='input-values', type='text', value='25,20,30,25'),
html.Button('更新图表', id='update-button'),
dcc.Graph(id='dynamic-pie-chart')
])
@app.callback(
Output('dynamic-pie-chart', 'figure'),
Input('update-button', 'n_clicks'),
Input('input-values', 'value')
)
def update_pie_chart(n_clicks, values_str):
values = list(map(int, values_str.split(',')))
fig = go.Figure(go.Pie(labels=labels, values=values))
return fig
if __name__ == '__main__':
app.run(debug=True)
在这个示例中,用户可以通过输入一个数字来动态更新饼图的数据。
当用户输入新的值时,update_pie
函数会被触发,它会根据新的数据重新生成饼图。
我们还可以进一步扩展这个功能,实现多级联动筛选、动态排序和颜色映射更新等,让饼图更加智能化和个性化。
总结
通过本文的深入探讨,我们掌握了Plotly
在饼图绘制上的高级技巧:
- 实现了点击分离、悬停提示等交互效果
- 开发了基于用户输入的动态更新功能
这些高级功能不仅提升了数据可视化的表现力,还增强了用户的交互体验。
原创作者: wang_yb 转载于: https://www.cnblogs.com/wang_yb/p/18801500