真香,这个python老牌可视化库seaborn,十年积累后的进化,全新使用方式

2023-11-13 16:26:13 浏览数 (3)

在Python数据可视化领域,知名度最高的当属 matplotlib,但此库存在操作复杂的问题。基于此,seaborn简化了操作流程而闻名,尽管其使用方式仍存在一些缺点。因此,在经历10年的打磨后,seaborn团队在更新至0.12版时提出了全新的操作模式。试用之后,已经不想再用回旧模式了。下面我们就体验一下新版seaborn。

本次使用的是 seaborn 0.13 版本。 pip install seaborn -U

这次的新模式称为 objects interface ,我称为对象接口。

按文档约定,导入模块:

新模式的相关功能访问,全部都在 seaborn.objects 模块中。

接着导入我们的数据,一份咖啡销售数据:

在作图之前,进行一些配置,防止图表中的中文变成乱码。

接下来可以愉快作图。

首先,看看利润和销售额的关系。既然是两个数值类型,就用散点图。

  • 行2:新模式遵从可视化图形语法。首先通过 so.Plot ,声明数据和映射关系
  • 行3:接着链式调用 add 方法。每一个 add 方法就是一个单独的图表。
  • 行4:add 方法中,第一个参数是表明需要的图形。这里使用 so.Dot() 表示"点"

原来的方式,是这样子写:

初看新模式的代码感觉更麻烦。但是,接下来的事情,你会开始感受到新模式的魅力。

现在,希望在上图基础上,添加一条拟合折线:

之前说到,每次调用 add 方法,就是新增一个图表(图层)。而 add 方法第一个参数指定图案(可以理解成图表类型),之后的参数,表达对数据的转换处理。这里写的 so.PolyFit 就是拟合运算。运算完全可以自定义,稍后我们会看到。

要学好一个库,就要总结它的核心流程。看一个示意图:

正是由于一开始声明了数据映射,这些映射会传递到下方每一个图层。所以在作图的时候,我们只需要告诉 seaborn,这一层我需要用点的图案表达每个数据,就得到了散点图。线图同样如此。

相比传统的一个函数一个图表的旧模式,新模式大大减少了我们使用上的负担。

再看一个例子:

现在不需要拟合线,并且希望把散点按不同的地区查看。

按不同地区查看,不就是要每个地区有单独的颜色吗?代码显然已经了:

  • 行2:颜色映射到 区域

就这么简单。可以非常多的属性可以做映射。比如我们希望点的大小,反映数据中的 毛利

是不是很香!现在真的别问我旧模式该怎么实现上面的效果了。

有人可能会疑惑,如果按照上面的映射,把一开始的拟合线加回去,会怎么样呢?

先不看结果来思考一下。数据映射会传递到线图的图层,那么应该会存在多种颜色的折线吧?

现在我们是真的理解了它的机制,不过,我们可是希望上面仍然只有一条拟合线,表示整体的拟合呀。

不怕,每个图层都可以覆盖掉 Poly 定义的映射。

是不是感觉一下子就学会了!?


再看一些例子,加深印象。

做一个区域的销售额的柱状图:

别急,你觉得对吗?

如果你执行上面的代码,就会发现作图时间很长。注意上图左下角,我这边足足执行了16秒。图也有点奇怪。

思考一下它的流程,当执行 add 的时候,看到我们用 so.Bar ,但没有指定聚合方式!因此,它就以每一行记录做一个 bar 图,按 x ,y 的配置,在图层上画出来。

现在我们指定一下 bar 图的聚合方式。

瞬间出来结果。现在每个柱子都是经过平均聚合的数据。 so.Agg 第一个参数可以指定聚合方式,默认是 'mean',你也可以传入任何的聚合函数或自定义的函数。与 pandas 的 agg 一样的原理。

继续,上图基础,再按市场类别,查看。也就是映射颜色:

好像不对劲!怎么小市场(small market) 比 主市场 (major market) 销售额更多。

再次分析一下它的过程你就懂了:

数据映射了 x,y,color,于是,数据达到 bar图层时,需要按x,color两个字段分组,并对y列做平均聚合(so.Agg())

聚合后的数据结果如下:

相信到这一步,你已经秒懂了。就是用这8行数据画柱状图。显然,同一个区域有两个柱子,并且重叠起来。

怎么解决?很简单,让它们每行数据的x轴位置一个往左,另一个往后移动一下,不就可以了吗?

这也是一种数据操作。只需要在 add 图层里面加入即可。

add图层中,除开第一个参数指定图案类型,你可以指定无数个数据处理的函数

seaborn 提供了一些常用的数据操作方法。按需掌握即可。

赶快用起来,真的很香。

不要忘记一键三连。你的点赞、收藏、关注,是我创作的动力。

0 人点赞