在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 提供了一些常用的数据操作方法。按需掌握即可。
赶快用起来,真的很香。
不要忘记一键三连。你的点赞、收藏、关注,是我创作的动力。