本文概述
- Seaborn:Python的统计数据可视化库
- 希伯恩vs Matplotlib
- 如何加载数据以构造海底图
- 如何显示海底情节
- 如何将Seaborn与Matplotlib默认一起使用
- 如何在Matplotlib中将Seaborn的颜色用作颜色图?
- 如何在其他情况下缩放Seaborn图
- 如何临时设置绘图样式
- 如何在Seaborn中设置图形大小
- 如何在Seaborn中旋转标签文本
- 如何在Seaborn中设置xlim或ylim
- 如何设置对数刻度
- 如何添加标题
- Python中的数据可视化
Seaborn:Python的统计数据可视化库
传达见解的最佳方法之一也是更具挑战性的方法是可视化它们:这样, 你可以更轻松地识别模式, 掌握困难的概念或吸引对关键元素的注意。使用Python进行数据科学时, 你很可能已经使用过Matplotlib, 这是一个2D绘图库, 可用于创建具有出版物质量的图形。基于此数据可视化库的另一个免费软件包是Seaborn, 它提供了一个高级界面来绘制统计图形。
今天的帖子将涵盖用户开始使用Seaborn图书馆时遇到的一些最常见问题。你可以正确回答以下几个问题?
- Seaborn vs Matplotlib?
- 如何加载数据以构造海底图
- 加载内置数据集
- 加载你的熊猫数据框
- 如何显示海底情节
- 如何将Seaborn与Matplotlib默认一起使用
- 如何在Matplotlib中将Seaborn的颜色用作颜色图?
- 如何为其他上下文缩放Seaborn图
- 如何临时设置绘图样式
- 如何在Seaborn中设置图形大小
- 如何旋转标签文字
- 如何在Seaborn中设置xlim或ylim
- 如何设置对数刻度
- 如何添加标题
对涵盖Matplotlib和Seaborn的课程感兴趣吗?阅读srcmini的Python数据可视化简介。
希伯恩vs Matplotlib
正如你刚才所读, Seaborn是Matplotlib的补充, 它专门针对统计数据可视化。但这还不止于此:Seaborn扩展了Matplotlib, 这就是为什么它可以解决使用Matplotlib的两个最大的麻烦。或者, 就像迈克尔·沃斯科姆(Michael Waskom)在” Seaborn简介”中所说的那样:”如果matplotlib”试图使简单的事情变得容易而困难的事情变得可能”, seaborn也会尝试使一套定义明确的困难的事情变得容易。
这些困难或沮丧之一与默认Matplotlib参数有关。 Seaborn使用不同的参数, 这些参数无疑会与那些不使用Matplotlib图的默认外观的用户交流。
比较以下图:
Matplotlib默认情况下, 通常不与用户交流的是颜色, 上, 右轴上的刻度线, 样式等。
上面的示例还使用户更加沮丧:使用Matplotlib处理DataFrames并不那么顺畅, 如果你使用Pandas进行探索性分析, 这可能会很烦人。这正是Seaborn致力于解决的问题:绘图功能可对包含整个数据集的DataFrame和数组进行操作。
随着Seaborn对Matplotlib的补充和扩展, 学习曲线是渐进的:如果你了解Matplotlib, 那么你将已经对Seaborn感到失望。
如果你觉得你的matplotlib技能生锈, 请查看以下资源:
- srcmini的数据科学中级Python, 介绍Matplotlib,
- Matplotlib教程,
- Matplotlib备忘单, 以及
- 使用Matplotlib事件处理程序API的Matplotlib教程查看体积3D数据。
如何加载数据以构造海底图
使用Seaborn时, 你可以使用图书馆本身必须提供的内置数据集之一, 也可以加载Pandas DataFrame。在本部分中, 你将了解如何同时执行这两项操作。
加载内置的Seaborn数据集
要开始使用内置的Seaborn数据集, 可以使用load_dataset()函数。要获得概述或检查此功能可以打开的所有数据集, 请转到此处。查看以下示例, 看看load_dataset()函数如何工作:
作为一个轶事, 你可能会知道, 导入约定sns来自电视连续剧《西翼》中的虚构人物塞缪尔·诺曼·”萨姆·西伯恩”, 可能会很有趣。这是Seaborn的核心开发人员Michael Waskom开的一个玩笑。
加载Pandas DataFrame获取数据
当然, 可视化数据的最大乐趣在于你将使用自己的数据而不是Seaborn库的内置数据集。 Seaborn与Pandas DataFrame和包含整个数据集的数组配合使用效果最佳。
请记住, DataFrame是一种将数据存储在矩形网格中的方法, 可以很容易地对其进行概述。这些网格的每一行对应于一个实例的度量或值, 而每一列都是一个包含特定变量数据的向量。这意味着DataFrame的行不需要包含但可以包含相同类型的值:它们可以是数字, 字符, 逻辑等。特别是对于Python, DataFrames随Pandas库一起提供, 它们被定义为具有可能不同类型的列的二维标记数据结构。
Seaborn之所以对DataFrames如此出色的原因是, 例如, 因为DataFrames中的标签会自动传播到绘图或其他数据结构, 如你在本教程的第一个示例中所看到的那样, 其中你用Seaborn绘制了一个小提琴图。在那里, 你看到x轴有一个图例total_bill, 而Matplotlib图则不是这样。这已经使你减少了很多工作。
但这并不意味着所有工作都已完成-相反。在许多情况下, 你仍需要操纵Pandas DataFrame, 以便可以正确显示绘图。如果你想了解更多信息, 请查看Python上的srcmini的DataFrames Pandas教程或Pandas Foundations课程。
如何显示海底情节
Matplotlib仍然是Seaborn的基础, 这意味着该图的解剖结构仍然相同, 你将需要使用plt.show()使图像向你显示。你可能已经从本教程的上一个示例中看到了这一点。无论如何, 这是另一个示例, 其中show()函数用于显示绘图:
请注意, 在上面的代码块中, 你使用了内置的Seaborn数据集, 并使用它创建了一个因子图。因子图是分类图, 在这种情况下是条形图。那是因为你已将kind参数设为” bar”。另外, 你设置应使用调色板参数显示的颜色, 并将图例设置为False。
如何将Seaborn与Matplotlib默认一起使用
正如你在简介中所读到的那样, Matplotlib默认值是用户可能不会比Seaborn默认值更令人愉悦的东西。但是, 还有许多相反的问题, 即使用Seaborn的问题和想要使用Matplotlib默认值进行绘制的问题。
以前, 你可以通过从Seaborn包中导入apionly模块来解决此问题。自2017年7月起不推荐使用。导入Seaborn时将不再应用默认样式, 因此你需要显式调用set()或set_style(), set_context()和set_palette()中的一个或多个, 以获取Seaborn或Matplotlib默认绘制。
如何在Matplotlib中将Seaborn的颜色用作颜色图?
除了将Seaborn与Matplotlib默认值结合使用外, 还存在一些关于如何将Seaborn颜色引入Matplotlib图中的问题。你可以使用color_palette()定义要使用的颜色图以及带有参数n_colors的颜色数。在这种情况下, 该示例将假定为data1和data2中定义的数据点分配了5个标签, 因此这就是为什么将5传递给此参数, 并且还要创建一个长度等于N的列表的原因, 其中5个整数变化在可变的颜色。
提示:你需要修改NumPy吗?考虑此NumPy教程或NumPy备忘单。
如何在其他情况下缩放Seaborn图
如果你需要用于演讲, 海报, 纸上或笔记本上的地块, 则可能需要更大或更小的地块。 Seaborn让你对此感到满意。你可以使用set_context()来控制绘图元素:
四个预定义的上下文是”纸”, “笔记本”, “谈话”和”海报”。提示:尝试将上面的srcmini Light块中的上下文更改为另一个上下文, 以研究该上下文对绘图的影响。
你还可以将更多参数传递给set_context()以缩放更多绘图元素, 例如font_scale或更多参数映射, 这些参数映射可以覆盖Seaborn上下文词典中预设的值。在以下代码块中, 你将覆盖为参数font.size和axes.labelsize设置的值:
请注意, 在第一个代码块中, 你首先进行了重置以恢复默认的Seaborn参数。你通过调用set()做到了这一点。如果你之前尝试过设置其他参数(例如绘图样式), 这将非常方便。
另外, 请记住, 可以使用更高级别的set()函数代替set_context()来调整其他绘图元素:
关于数据可视化的最困难的事情之一是进一步自定义图表, 直到它们达到你的期望为止, 并且在与Seaborn合作时保持不变。这就是为什么要记住Matplotlib图的解剖以及这对Seaborn库的意义的原因。
对于Seaborn, 你有两种类型的功能:轴级功能和图形级功能。在Axes级别上运行的函数是例如regplot(), boxplot(), kdeplot()等, 而在Figure级别上运行的函数是lmplot(), factorplot(), jointplot()和a夫妇。
这意味着第一组通过采用显式的ax参数并返回一个axes对象来标识, 而第二组函数创建的图可能包含始终以”有意义”方式组织的axes。因此, “图”级功能将需要完全控制该图, 因此你将无法在一个已经存在的图上绘制一个lmplot。调用图形级功能时, 始终会初始化图形并将其设置为要绘制的特定图。
制作箱线图和lmplot时, 你可以轻松地看到这一点, 例如:
>>> sns.boxplot(x="total_bill", data=tips)
<matplotlib.axes._subplots.AxesSubplot object at 0x117e8da20>
>>> sns.lmplot('x', 'y', data, size=7, truncate=True, scatter_kws={"s": 100})
<seaborn.axisgrid.FacetGrid object at 0x11fa03438>
但是, 你看到, 一旦调用lmplot(), 它将返回FacetGrid类型的对象。该对象具有一些对生成的图进行操作的方法, 这些方法对图的结构有所了解。它还在FacetGrid.fig和FacetGrid.axes参数处公开了基础图形和轴数组。
自定义绘图时, 这意味着你将更愿意对在AXes级别使用regplot()构建的回归绘图进行自定义, 而在Figure级别针对lmplot()进行定制。
通过介绍以下一些最常见的问题, 让我们看看它在实践中是如何工作的:
如何临时设置绘图样式
你可以在with语句中使用axes_style()来临时设置打印样式。除了使用plt.subplot()外, 这还允许你制作具有不同样式的轴的图形, 如以下示例所示:
如何在Seaborn中设置图形大小
对于轴级功能, 可以使用传递了figsize参数的plt.subplots()函数。
对于图形级功能, 你依靠两个参数来设置图形大小, 即大小和长宽比:
如何在Seaborn中旋转标签文本
要在Seaborn图中旋转标签文本, 你将需要在Figure级别上进行操作。请注意, 在下面的代码块中, 你使用FacetGrid方法之一(即set_xticklabels)来旋转文本标签:
如何在Seaborn中设置xlim或ylim
对于可以在”轴”级别上使用的箱线图, 你需要确保将箱线图分配给变量ax, 这将是matplotlib.axes._subplots.AxesSubplot对象, 如上所述。在对象处于轴级别的情况下, 可以使用set()函数来设置xlim, ylim等。就像下面的示例一样:
请注意, 也可以使用ax.set_xlim(10, 100)来限制x轴。
现在, 对于”图形”级别的功能, 你可以借助axes参数访问Axes对象。让我们看看如何利用ax参数来设置xlim和ylim属性:
同样, FacetGrid借助fig参数公开基础图。
如何设置对数刻度
你可以修改轴的比例以更好地显示趋势。这就是在某些情况下在一个或两个轴上使用对数刻度可能有用的原因。对于使用regplot()的简单回归, 可以在Axes对象的帮助下设置比例。
使用”图形”级功能时, 可以借助FacetGrid对象的set()方法设置xscale和yscale属性:
如何添加标题
要将标题添加到你的Seaborn绘图中, 基本上按照与前面各节相同的步骤进行。对于轴级功能, 你将借助set_title()在轴级本身上调整标题。只需输入要显示的标题即可:
对于图级功能, 你可以像在前面部分之一中所做的因子图一样浏览图, 也可以通过轴进行操作:
Python中的数据可视化
恭喜你!你已经完成了此Seaborn入门教程。
如果你对交互式可视化感兴趣, 请查看srcmini的Bokeh交互式数据可视化课程!在本课程中, 你将与Bokeh的开发商兼Continuum Analytics的软件工程师Bryan Van de Ven一起学习如何创建多样化的, 丰富的, 数据驱动的交互式可视化文件。当你使用它时, 也不要错过srcmini的Bokeh备忘单。
评论前必须登录!
注册