Plotly.py 饼图(Pie Charts)完全指南
饼图(Pie Chart)是一种常见的统计图表,通过将圆形分割成不同扇形来展示各部分在整体中的比例关系。本文将全面介绍如何使用 Plotly.py 库创建和定制各种饼图。
基础饼图创建
使用 Plotly Express 可以快速创建基础饼图:
import plotly.express as px
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries'
fig = px.pie(df, values='pop', names='country', title='欧洲大陆人口分布')
fig.show()
在这个例子中:
values
参数指定了每个扇形的大小names
参数指定了扇形的标签- 对于人口小于200万的国家,我们将其合并为"Other countries"类别
饼图高级定制
颜色控制
Plotly 提供了多种方式控制饼图的颜色:
- 使用预定义的颜色序列:
fig = px.pie(df, values='tip', names='day',
color_discrete_sequence=px.colors.sequential.RdBu)
- 自定义颜色映射:
fig = px.pie(df, values='tip', names='day', color='day',
color_discrete_map={'Thur':'lightcyan',
'Fri':'cyan',
'Sat':'royalblue',
'Sun':'darkblue'})
文本标签控制
可以调整饼图中文本标签的显示方式和位置:
fig.update_traces(textposition='inside', textinfo='percent+label')
textinfo
参数可以组合使用:
label
:显示分类标签percent
:显示百分比value
:显示实际值
统一文本大小
使用 uniformtext
布局参数可以确保所有标签具有相同大小:
fig.update_layout(uniformtext_minsize=12, uniformtext_mode='hide')
特殊饼图类型
环形图(Donut Chart)
通过设置 hole
参数创建环形图:
fig = go.Figure(data=[go.Pie(labels=labels, values=values, hole=.3)])
hole
取值在0-1之间,表示中心孔洞占整个饼图的比例。
突出显示扇形
使用 pull
参数可以将特定扇形从中心拉出:
fig = go.Figure(data=[go.Pie(labels=labels, values=values,
pull=[0, 0, 0.2, 0])])
子图中的饼图
可以在一个图中放置多个饼图:
from plotly.subplots import make_subplots
fig = make_subplots(rows=1, cols=2, specs=[[{'type':'domain'}, {'type':'domain'}]])
fig.add_trace(go.Pie(labels=labels1, values=values1), 1, 1)
fig.add_trace(go.Pie(labels=labels2, values=values2), 1, 2)
高级特性
纹理填充
Plotly 5.15+ 支持为饼图添加纹理:
fig = go.Figure(data=[go.Pie(
labels=labels,
values=values,
marker=dict(colors=colors,
pattern=dict(shape=[".", "x", "+", "-"]))
)])
文本方向控制
insidetextorientation
参数控制扇形内文本的方向:
"auto"
:自动旋转以适应扇形"horizontal"
:强制水平"radial"
:径向排列"tangential"
:切向排列
fig.update_traces(insidetextorientation='radial')
饼图最佳实践
-
限制分类数量:饼图适合展示5-7个分类,过多会导致难以辨认
-
排序扇形:按大小排序扇形有助于比较
-
避免3D效果:3D饼图容易造成视觉误导
-
考虑替代方案:对于复杂数据,柱状图或堆叠柱状图可能是更好的选择
通过掌握这些技巧,你可以使用 Plotly.py 创建出既美观又专业的饼图来有效展示你的数据。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考