用这个技巧构建一个更好的条形图

构建更好的条形图的技巧

(这真的是一个 seaborn 散点图!)

“国会时代”的散点图的一部分(所有图片作者提供)

每当我需要获得有效可视化的灵感时,我会浏览《经济学人》、Visual Capitalist 或《华盛顿邮报》。在其中一次浏览中,我发现了一张有趣的信息图表 – 类似于上面显示的那张 – 它将美国国会的每个成员的年龄与他们的世代对比进行了绘制。

我最初的印象是这是一个水平条形图,但仔细观察发现,每个条形由多个标记组成,因此它是一个散点图。每个标记代表一个国会成员。

在这个快速成功的数据科学项目中,我们将使用Python、pandas和seaborn重新创建这个吸引人的图表。在此过程中,我们将了解一些您可能不知道存在的标记类型。

数据集

由于美国有候选年龄法律,国会成员的生日是公开记录的一部分。您可以在多个地方找到这些记录,包括《美国国会传记目录》和维基百科。

为了方便起见,我已经编制了一个包含当前国会成员姓名、生日、政府部门和政党的CSV文件,并将其存储在这个Gist中。

代码

以下代码是在Jupyter Lab中编写的,并通过单元格进行描述。

导入库

from collections import defaultdict  # 用于按年龄计数成员。import numpy as npimport matplotlib.pyplot as pltfrom matplotlib import patches  # 用于在图表上绘制框.import pandas as pdimport seaborn as sns

为世代数据分配常量

我们将在图表上注释世代群体,如婴儿潮一代和X世代。以下代码计算了每个世代的当前年龄跨度,并包含了世代名称和突出显示颜色的列表。因为我们想将这些列表视为常量,所以我们将名称大写并使用下划线作为前缀。

# 为图表准备世代数据以绘制框:CURRENT_YEAR = 2023…