在 Seaborn 中绘图比在 Matplotlib 中简单得多。虽然 Matplotlib 使困难的事情成为可能,但 Seaborn 通过为您提供一系列“开箱即用”的绘图类型,使复杂的事情变得简单。
几乎只需一行代码…
在本系列中,我通过在每个库中绘制相同的图表来比较 Python 绘图库。这是一个英国选举结果的多组条形图。
在我们继续之前,请注意您可能需要调整您的 Python 环境才能运行此代码,包括以下内容。
数据可在线获取,可以使用 pandas 导入
import pandas as pd
df = pd.read_csv('https://anvil.works/blog/img/plotting-in-python/uk-election-results.csv')
以下是如何在 Seaborn 中创建此多组条形图
ax = sns.barplot(
data=df,
x="year",
y="seats",
hue="party",
palette=['blue', 'red', 'yellow', 'grey'],
saturation=0.6,
)
结果

一个多条形图,几乎只需一行 Python 代码。(© 2019 Anvil)
Seaborn 具有如此简单的界面,因为它不需要您操纵数据结构来定义绘图的外观。相反,您将数据整理成 长格式,然后完成数据操作。您只需告诉 Seaborn 将绘图的哪些方面映射到数据中的哪些变量即可。
如果您想在条形的 hue
中编码 party
变量,请指定
hue="party"
如果您想在 X 轴上的位置编码 year
变量,请指定
x="year"
Seaborn 处理颜色的方式非常有趣。您可以使用人类可读的颜色名称来指定颜色。我使用了红色、蓝色、黄色和灰色,但您也可以使用像丑陋的绿色、暗淡的蓝色和电紫色这样的颜色。这些颜色被映射到由 XKCD 作者 Randall Munroe 创建的 众包颜色名称定义库。

仅举几个出奇准确的 XKCD 颜色名称(© 2019 Anvil)
为了完整起见,我必须提及在绘图语句之前需要运行几行样板代码
# A couple of lines of boilerplate
sns.set()
plt.figure()
当然,您必须导入库和数据
# Import Matplotlib and Seaborn
import matplotlib.pyplot as plt
import seaborn as sns
由于这是一个 Matplotlib 的包装器,您仍然需要在最后施放 Matplotlib 绘图魔法
plt.show()
毫不妥协
好的,所以我有了这个非常漂亮的界面,它使常见的绘图变得非常简单。但这不会剥夺我的能力吗?幸运的是,事实并非如此。Seaborn 是一种很好的抽象——它使常见情况变得非常容易,但它也让您可以访问较低级别的抽象。就像 Anvil 一样,Seaborn 为您提供了“逃生舱口”,以便在需要时使用底层。
当我调用 sns.barplot
时,它返回了该绘图的 Matplotlib Axis
对象。我可以使用它来添加标题和网格,并调整轴标签,就像我在 Matplotlib 中所做的那样
ax.set_title('UK election results')
ax.grid(color='#cccccc')
ax.set_ylabel('Seats')
ax.set_xlabel(None)
ax.set_xticklabels(df["year"].unique().astype(str), rotation='vertical')
这是结果

Seaborn 绘图,现在进行了 Matplotlib 调整。(© 2019 Anvil)
您可以将此示例复制为 Anvil 应用程序 此处(注意:Anvil 需要注册才能使用)。
下一步:客户端 Python 中的动态绘图
Seaborn 是我最喜欢的绘图库之一,这归功于其简洁性和强大功能的结合。但它生成的是静态图像,如果您在 Web 上使用它们,您可能需要更多交互性。
下次,我将看看 Plotly,它允许您在浏览器中创建动态绘图,并通过 JavaScript 核心提供 Python 接口。
本文基于 如何在 Anvil 的博客上使用 Seaborn 制作绘图,并已获得许可重复使用。
评论已关闭。