使您的图表更加完美——UTF-8

在Plotly Express中使用自定义图标

由Le Vu在Unsplash上拍摄的照片

Python的主要图形库可以直接制作美丽的图表,但它们设计用于探索性数据分析、专业报告和科学文章。它们可能对一般公众和其他非技术人员来说有些枯燥。

在这个快速成功的数据科学项目中,我们将介绍一种使用现成图标来为您的图表增添趣味的方法,这些图标可以被视为文本。具体而言,我们将使用流行的Plotly Express库制作一个条形图,显示每个棋子在一个空棋盘的中心时理论上可以控制的最大正方形数量。

为了使这个信息图更加吸引人,我们将使用UTF-8字符集中可用的符号来装饰条形。

条形图中装饰条的示例(作者提供的图片)

什么是UTF-8?

根据维基百科,“UTF-8是一种可变长度的字符编码标准,用于电子通信。名称源自Unicode(或通用编码字符集)转换格式—8位。UTF-8是万维网(和互联网技术)的主要编码。”

使用UTF-8,您想使用的每个字符,例如pi符号或字母“A”,都被分配一个唯一的代码。除了熟悉的文本字符外,UTF-8还包括各种类型的图标,从微笑的脸到喷气式飞机到蜗牛。当注释Plotly Express图表时,这些图标可以被视为文本。

查找UTF-8图标

您可以在此网站上搜索UTF-8图标。而不是搜索每个单独的棋子,请搜索“chess”。这将返回下面显示的页面,其中列出了兼容的图标。

搜索Unicode符号“chess”的结果(作者提供的图片)

如果单击白色骑士图标,将会出现下面的屏幕。

单击白色骑士图标的结果(作者提供的图片)

这就是有趣的部分。要使用此图标,只需突出并复制大图像。然后,您可以直接将此图像粘贴到您的Python代码中,如我很快就会演示的那样。不需要输入实际的UTF-8代码。

Plotly Express库

为了制作图表,我们将使用Plotly Express,这是一个高级版本的Plotly图形库。该库抽象了制作图表的大部分繁琐工作,让您轻松地产生具有许多内置功能的吸引人的图形。

Plotly Express需要Plotly作为依赖项。您可以使用conda或pip安装它。

这是conda安装:conda install -c plotly plotly_express

这是pip版本:pip install plotly

代码

以下代码在JupyterLab中运行。它通过单元格呈现和描述。

导入库

Plotly Express 旨在与 pandas DataFrame 格式的数据良好配合,因此我们需要同时导入 Plotly Express 和 pandas。可以使用 conda install pandaspip install pandas 安装 Pandas。

import pandas as pdimport plotly.express as px

输入数据

我们将数据输入到两个字典中,这些字典使用棋子名称作为键。一个字典将保存每个棋子控制的正方形数量,另一个字典将保存 UTF-8 符号。我们将按照棋子名称合并这些字典,因此这些名称在两个字典中应该相同。

请注意,您可以直接从之前提到的 UTF-8 搜索页面粘贴图标。这很酷,对吧?您只需要将它用单引号或双引号括起来,因为它被视为字符串。

squares = {'King': 8,            'Queen': 27,            'Rook': 14,           'Bishop': 13,           'Knight': 8,            'Pawn': 2}symbols = {'King': '♔',            'Queen': '♕',            'Rook': '♖',           'Bishop': '♗',           'Knight': '♘',            'Pawn': '♙'}df_squares = pd.DataFrame(squares.items(),                           columns=['Piece', 'Max Squares'])df_squares = df_squares.sort_values(by='Max Squares')df_symbols = pd.DataFrame(symbols.items(),                           columns=['Piece', 'Symbol'])df_merged = df_squares.merge(df_symbols)df_merged.head(6)
合并后的数据框(由作者提供的图像)

创建图表

Plotly Express 使生成标准图表(如条形图、散点图、热图等)变得容易。在这里,我们将使用 bar() 方法制作条形图。一旦将 DataFrame 的名称传递给该方法,您只需要提供列名称即可在后续参数中访问数据。这使得代码非常易读。

text 参数捕获 UTF-8 符号,该符号将自动放置在每个条形图的顶部附近。要控制符号的大小,请使用 update_traces() 方法的 textfont_size 参数。 marker_color 参数是指条形图的颜色,而不是符号的颜色。

fig = px.bar(df_merged,              x='Piece',              y='Max Squares',             height=550,             text='Symbol')fig.update_traces(textfont_size=70, marker_color='black')fig.show()  # 可选
每种棋子理论上能够控制的最大正方形数量(由作者提供的图像)

正如您所见,UTF-8 图标在制作 Plotly Express 中的图表时可以被视为普通文本。这意味着您可以将它们用作文本注释,并将它们放置在任何位置。在接下来的示例中,我们在 Knight 条中放置一个红色笑脸,以演示此过程。

# 添加注释:fig.add_annotation(dict(font=dict(color='red',                                  size=50),                                  x=0.39,                                  y=0.45,                                  showarrow=False,                                  text="☺",                                  textangle=0,                                  xanchor='left',                                  xref="paper",                                  yref="paper"))fig.show()  # 可选
在 Knight 条上贴上红色笑脸的条形图(由作者提供的图像)

结果

UTF-8 图标让您的绘图增添了一点幽默感,给它们带来了“信息图形”类型的感觉。虽然对于分析工作或科学文章来说不是必需的,甚至不被期望,但在准备针对非技术人员的通讯、教程、年度报告和其他文档时,以这种方式装饰绘图可能是有益的。

谢谢!

感谢您的阅读,请关注我以获取更多快速成功的数据科学项目。