import plotly.express as px
import pandas as pd
from vega_datasets import data
9 使用 Plotly Express 的单变量图表
9.1 简介
在本课中,您将学习如何使用 Plotly Express 创建单变量图表。单变量图表对于理解单一变量的分布至关重要,无论该变量是分类的还是定量的。
让我们开始吧!
9.2 学习目标
- 使用 Plotly Express 为分类数据创建条形图、饼图和树状图
- 使用 Plotly Express 为定量数据生成直方图
- 自定义图表的外观和标签
9.3 导入
本课需要 plotly.express,pandas 和 vega_datasets。如果您尚未安装,请先安装。
9.4 定量数据
9.4.1 直方图
直方图用于可视化连续变量的分布。
让我们创建一个“tips”数据集中小费金额的直方图。
= px.data.tips()
tips # view the first 5 rows tips.head()
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 |
='tip') px.histogram(tips, x
我们可以看到,最高的条形对应于小费在 1.75 到 2.24 之间,频数为 55。这意味着有 55 个小费处于 1.75 到 2.24 之间。
请注意,Plotly 图表是交互式的。您可以将鼠标悬停在条形上,以查看每个区间中小费的确切数量。
尝试使用右上角的按钮。将图表下载为 png 的按钮特别有用。
9.4.2 练习题:速度分布直方图
按照小费直方图的示例,使用 birdstrikes 数据集创建速度分布 (Speed_IAS_in_knots) 的直方图。
= data.birdstrikes()
birdstrikes
birdstrikes.head()# Your code here
Airport__Name | Aircraft__Make_Model | Effect__Amount_of_damage | Flight_Date | Aircraft__Airline_Operator | Origin_State | When__Phase_of_flight | Wildlife__Size | Wildlife__Species | When__Time_of_day | Cost__Other | Cost__Repair | Cost__Total_$ | Speed_IAS_in_knots | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | BARKSDALE AIR FORCE BASE ARPT | T-38A | None | 1/8/90 0:00 | MILITARY | Louisiana | Climb | Large | Turkey vulture | Day | 0 | 0 | 0 | 300.0 |
1 | BARKSDALE AIR FORCE BASE ARPT | KC-10A | None | 1/9/90 0:00 | MILITARY | Louisiana | Approach | Medium | Unknown bird or bat | Night | 0 | 0 | 0 | 200.0 |
2 | BARKSDALE AIR FORCE BASE ARPT | B-52 | None | 1/11/90 0:00 | MILITARY | Louisiana | Take-off run | Medium | Unknown bird or bat | Day | 0 | 0 | 0 | 130.0 |
3 | NEW ORLEANS INTL | B-737-300 | Substantial | 1/11/90 0:00 | SOUTHWEST AIRLINES | Louisiana | Take-off run | Small | Rock pigeon | Day | 0 | 0 | 0 | 140.0 |
4 | BARKSDALE AIR FORCE BASE ARPT | KC-10A | None | 1/12/90 0:00 | MILITARY | Louisiana | Climb | Medium | Unknown bird or bat | Day | 0 | 0 | 0 | 160.0 |
我们可以通过在单元格中键入 px.histogram?
并运行它来查看该函数的帮助文档。
px.histogram?
从帮助文档中,我们可以看到 px.histogram
函数具有许多可用于自定义图表的参数。
让我们通过添加标题、自定义 x 轴标签和更改颜色使直方图更美观一些。
px.histogram(
tips,="tip",
x={"tip": "Tip Amount ($)"},
labels="Distribution of Tips",
title=["lightseagreen"]
color_discrete_sequence )
颜色名称基于 Mozilla 的标准 CSS 颜色命名。您可以在 这里 查看完整列表。
或者,您可以使用十六进制颜色代码,例如 #1f77b4
。您可以通过使用取色器轻松获取这些颜色。请在 Google 上搜索“color picker”。
px.histogram(
tips,="tip",
x={"tip": "Tip Amount ($)"},
labels="Distribution of Tips",
title=["#6a5acd"]
color_discrete_sequence )
9.4.3 练习题:鸟类撞击事件直方图自定义
更新您的 birdstrikes 直方图,使用十六进制代码颜色,添加标题,并将 x 轴标签更改为“速度(海里每小时)”。
# Your code here
9.5 分类数据
9.5.1 条形图
条形图可用于显示单个分类变量的频数。
Plotly 有一个 px.bar
函数,我们稍后会看到。但对于单一分类变量,Plotly 要求您使用的函数实际上是 px.histogram
。(世界各地的统计学家都在抱怨;直方图本应仅用于定量数据!)
让我们创建一个基本的条形图,显示 tips 数据集中性别的分布:
='sex') px.histogram(tips, x
让我们在条形上添加计数。
='sex', text_auto= True) px.histogram(tips, x
我们可以通过添加颜色轴、自定义标签和标题来增强图表。
='sex', text_auto=True, color='sex',
px.histogram(tips, x={'sex': 'Gender'},
labels='Distribution of Customers by Gender') title
可以说,在这个图中,我们不需要 color
轴,因为 sex
变量已经由 x 轴表示。但公众喜欢颜色,所以仍然值得包括。
然而,我们应该移除图例。让我们还使用自定义颜色。
为此,我们可以首先创建一个图形对象,然后使用该对象的 .layout.update
方法来更新图例。
= px.histogram(
tips_by_sex
tips,="sex",
x=True,
text_auto="sex",
color={"sex": "Gender"},
labels="Distribution of Customers by Gender",
title=["#1f77b4", "#ff7f0e"],
color_discrete_sequence
)
=False) tips_by_sex.update_layout(showlegend
9.5.2 练习题:鸟类撞击事件按飞行阶段统计
创建一个条形图,显示按飞行阶段 When__Phase_of_flight
的鸟类撞击事件频率。添加适当的标签和标题。使用您选择的颜色,并移除图例。
# Your code here
:::
9.5.2.1 排序类别
有时在条形图中为类别指定特定顺序是很有用的。
考虑一下这张 2013 年蒙特利尔市长选举中按区划分的当选者条形图。
= px.data.election()
election election.head()
district | Coderre | Bergeron | Joly | total | winner | result | district_id | |
---|---|---|---|---|---|---|---|---|
0 | 101-Bois-de-Liesse | 2481 | 1829 | 3024 | 7334 | Joly | plurality | 101 |
1 | 102-Cap-Saint-Jacques | 2525 | 1163 | 2675 | 6363 | Joly | plurality | 102 |
2 | 11-Sault-au-Récollet | 3348 | 2770 | 2532 | 8650 | Coderre | plurality | 11 |
3 | 111-Mile-End | 1734 | 4782 | 2514 | 9030 | Bergeron | majority | 111 |
4 | 112-DeLorimier | 1770 | 5933 | 3044 | 10747 | Bergeron | majority | 112 |
='winner') px.histogram(election, x
让我们为类别定义一个自定义顺序。“Bergeron” 将排在第一位,然后是 “Joly”,然后是 “Coderre”。
= ["Bergeron", "Joly", "Coderre"]
custom_order = px.histogram(election, x='winner', category_orders={'winner': custom_order})
election_chart election_chart
我们也可以按频率对类别进行排序。
我们可以使用 x 轴的 categoryorder
属性按频率对类别进行排序。
= px.histogram(election, x="winner")
election_chart ="total descending") election_chart.update_xaxes(categoryorder
或者按升序:
= px.histogram(election, x="winner")
election_chart ="total ascending") election_chart.update_xaxes(categoryorder
9.5.3 练习题:已排序的原产州条形图
创建一个已排序的条形图,显示按原产州划分的鸟类撞击事件分布。按频率的降序排序条形。
# Your code here
9.5.4 水平条形图
当您有许多类别时,水平条形图通常比垂直条形图更容易阅读。要创建水平条形图,只需使用 y
轴而不是 x
轴。
='day') px.histogram(tips, y
9.5.5 练习题:原产州的水平条形图
创建一个水平条形图,显示按原产州划分的鸟类撞击事件分布。
# Your code here
9.5.6 饼图
饼图也有助于显示分类变量的比例。它们最好在类别数量较少时使用。类别数量较多时,饼图难以阅读。
让我们创建一个按星期几分布的小费饼图。
="day") px.pie(tips, names
我们可以向饼图添加标签,使其更易于阅读。
= px.pie(tips, names="day")
tips_by_day = tips_by_day.update_traces(textposition="inside", textinfo="percent+label")
tips_by_day_with_labels tips_by_day_with_labels
不再需要图例,因此我们可以将其移除。
=False) tips_by_day_with_labels.update_layout(showlegend
如果您忘记了如何进行此类简单更改,请随时查阅 Plotly 文档、Google 或 ChatGPT。
9.5.7 练习题:野生动物大小饼图
创建一个饼图,显示按野生动物大小划分的鸟类撞击事件分布。将百分比和标签包含在饼片内。
# Your code here
:::
9.6 总结
在本课中,您学习了如何使用 Plotly Express 创建单变量图表。您现在应该对创建条形图、饼图和直方图有信心。您还应该对自定义图表的外观感到舒适。
下节课见。