文章目录
- 四、实例
- 4.1 带有 plotly express 的饼图
- 4.1.1 欧洲大陆的人口
- 4.1.2 带有重复标签的饼图
- 4.1.3 使用 px.pie 设置饼图扇区的颜色
- 4.1.4 对离散颜色使用显式映射
- 4.1.5 自定义使用 px.pie 创建的饼图
- 4.1.13 Dash 中的饼图
四、实例
饼图是一种圆形统计图表,它被划分为扇区来说明数字比例。
如果您正在寻找多级分层饼状图表,请转到 Sunburst 教程。
4.1 带有 plotly express 的饼图
Plotly Express是 Plotly 的易于使用的高级界面,它对各种类型的数据进行操作并生成易于样式化的图形。
在px.pie中,由饼图的扇区可视化的数据设置在 中values。扇区标签设置在names.
4.1.1 欧洲大陆的人口
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()
4.1.2 带有重复标签的饼图
具有相同值的数据帧的行在names同一扇区中组合在一起。
import plotly.express as px
# 这个数据框有244行,但是“day”有4个不同的值`
df = px.data.tips()
print(df)
'''
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
.. ... ... ... ... ... ... ...
239 29.03 5.92 Male No Sat Dinner 3
240 27.18 2.00 Female Yes Sat Dinner 2
241 22.67 2.00 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3.00 Female No Thur Dinner 2
[244 rows x 7 columns]
'''
fig = px.pie(df, values='tip', names='day')
fig.show()
4.1.3 使用 px.pie 设置饼图扇区的颜色
import plotly.express as px
df = px.data.tips()
'''
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
.. ... ... ... ... ... ... ...
239 29.03 5.92 Male No Sat Dinner 3
240 27.18 2.00 Female Yes Sat Dinner 2
241 22.67 2.00 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3.00 Female No Thur Dinner 2
[244 rows x 7 columns]
'''
fig = px.pie(df, values='tip', names='day', color_discrete_sequence=px.colors.sequential.RdBu)
fig.show()
4.1.4 对离散颜色使用显式映射
有关离散颜色的更多信息,请参阅专用页面。
import plotly.express as px
df = px.data.tips()
'''
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
.. ... ... ... ... ... ... ...
239 29.03 5.92 Male No Sat Dinner 3
240 27.18 2.00 Female Yes Sat Dinner 2
241 22.67 2.00 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3.00 Female No Thur Dinner 2
[244 rows x 7 columns]
'''
fig = px.pie(df, values='tip', names='day', color='day',
color_discrete_map={'Thur':'lightcyan',
'Fri':'cyan',
'Sat':'royalblue',
'Sun':'darkblue'})
fig.show()
4.1.5 自定义使用 px.pie 创建的饼图
在下面的示例中,我们首先创建一个带有 的饼图px,pie,使用它的一些选项,例如hover_data(哪些列应该出现在悬停中)或labels(重命名列名)。为了进一步调整,我们调用fig.update_traces设置图表的其他参数(您也可以fig.update_layout用于更改布局)。
import plotly.express as px
df = px.data.gapminder().query("year == 2007").query("continent == 'Americas'")
print(df)
'''
country continent year ... gdpPercap iso_alpha iso_num
59 Argentina Americas 2007 ... 12779.379640 ARG 32
143 Bolivia Americas 2007 ... 3822.137084 BOL 68
179 Brazil Americas 2007 ... 9065.800825 BRA 76
251 Canada Americas 2007 ... 36319.235010 CAN 124
287 Chile Americas 2007 ... 13171.638850 CHL 152
311 Colombia Americas 2007 ... 7006.580419 COL 170
359 Costa Rica Americas 2007 ... 9645.061420 CRI 188
395 Cuba Americas 2007 ... 8948.102923 CUB 192
443 Dominican Republic Americas 2007 ... 6025.374752 DOM 214
455 Ecuador Americas 2007 ... 6873.262326 ECU 218
479 El Salvador Americas 2007 ... 5728.353514 SLV 222
611 Guatemala Americas 2007 ... 5186.050003 GTM 320
647 Haiti Americas 2007 ... 1201.637154 HTI 332
659 Honduras Americas 2007 ... 3548.330846 HND 340
791 Jamaica Americas 2007 ... 7320.880262 JAM 388
995 Mexico Americas 2007 ... 11977.574960 MEX 484
1115 Nicaragua Americas 2007 ... 2749.320965 NIC 558
1187 Panama Americas 2007 ... 9809.185636 PAN 591
1199 Paraguay Americas 2007 ... 4172.838464 PRY 600
1211 Peru Americas 2007 ... 7408.905561 PER 604
1259 Puerto Rico Americas 2007 ... 19328.709010 PRI 630
1559 Trinidad and Tobago Americas 2007 ... 18008.509240 TTO 780
1619 United States Americas 2007 ... 42951.653090 USA 840
1631 Uruguay Americas 2007 ... 10611.462990 URY 858
1643 Venezuela Americas 2007 ... 11415.805690 VEN 862
[25 rows x 8 columns]
'''
fig = px.pie(df, values='pop', names='country',
title='美洲大陆的人口',
hover_data=['lifeExp'], labels={'lifeExp':'预期寿命'})
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()
4.1.13 Dash 中的饼图
Dash是使用 Plotly 图形在 Python 中构建分析应用程序的最佳方式。要运行下面的应用程序,运行pip install dash,单击“下载”以获取代码并运行python app.py。
开始使用官方 Dash 文档,了解如何使用Dash Enterprise轻松设计和部署此类应用程序。
import dash
from dash import html, dcc
from dash.dependencies import Input, Output
import plotly.express as px
# 这个数据框有244行,但是“day”有4个不同的值`
df = px.data.tips()
print(df)
'''
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
.. ... ... ... ... ... ... ...
239 29.03 5.92 Male No Sat Dinner 3
240 27.18 2.00 Female Yes Sat Dinner 2
241 22.67 2.00 Male Yes Sat Dinner 2
242 17.82 1.75 Male No Sat Dinner 2
243 18.78 3.00 Female No Thur Dinner 2
[244 rows x 7 columns]
'''
app = dash.Dash(__name__)
app.layout = html.Div([
html.P("Names:"),
dcc.Dropdown(
id='names',
value='day',
options=[{'value': x, 'label': x}
for x in ['smoker', 'day', 'time', 'sex']],
clearable=False
),
html.P("Values:"),
dcc.Dropdown(
id='values',
value='total_bill',
options=[{'value': x, 'label': x}
for x in ['total_bill', 'tip', 'size']],
clearable=False
),
dcc.Graph(id="pie-chart"),
])
@app.callback(
Output("pie-chart", "figure"),
[Input("names", "value"),
Input("values", "value")])
def generate_chart(names, values):
fig = px.pie(df, values=values, names=names)
return fig
app.run_server(debug=True)