python数据可视化柱状图_Python数据可视化,seaborn如何做出非常规图表

公众号发送"可视化",获取源码与数据

前言

上一节我们单纯使用 matplotlib 制作出以下图表:

f2a92778-a98b-46ea-b7bd-bf8ea9d32b68.png

每年小麦产量柱状图

使用不同颜色标记最小与最大值的柱子

但是,如果只是制作标准的图表,我们有许多其他的选择。最常见的就是使用 seaborn ,他是基于 matplotlib 的包装。

这一节我们就来看看,如何使用 seaborn 生成标准图表,然后结合 matplotlib 做出定制效果。

特别是多系列的情况下,会有一些技巧。

本文目标图表是这样子:

c5e33890-ebc0-4ddc-b7bc-399205c83d23.png

2个系列。每个系列找出最小最大的柱子,标记成不同的颜色

本文所需要的库如下:

7d624b47-e261-4f70-a23e-3d4b764efff8.png

数据是这样子:

05611b00-022a-45d2-8022-dc71f7f52dd5.png

上一节做的事情如下:

设置 x 轴标签的旋转角度

设置某个指定柱状图的柱子颜色

简单把这些事情包装成函数:

ed8868d0-3a63-48cc-ac44-3d474742ad6e.png

使用 seaborn 的代码,实际与上一节直接使用 matplotlib 差不多:

48a57ea8-250d-4320-98ec-38b7b4321ce3.png

01908dc3-28cc-4722-870d-a65c24c52ae5.png

看起来 seaborn 没有特别的地方!

这是因为我们只有一个系列(上图只涉及2个维度:wheat 与 year)

多系列

稍微修改一下数据,

c3d14f90-084a-4dd0-b57c-2a100f93f5af.png

行3、4、5:复制一份数据,小麦产量随机生成

行7、8:新增一个列"type",把数据划分成2类:"原始" 、"修改"

行10:合并成一份数据

行12:避免数据太多,图表不利于阅读,我只保留1750年以后的数据

现在数据成这样子:

f2eded4b-a3d1-4b01-8038-5fa266695217.png

每个年份都有2行记录,字段"type"可以区分他们

使用 seaborn 可以非常方便映射多个维度的数据:

e050517f-17dd-4feb-bb4e-5d98ba313415.png

行1:hue 是类别映射,通常如果有一个列数据是文本,就可以映射上去。这里把数据中的"type"字段映射

图表成这样子:

9aaf643d-55e8-4ee6-a0da-a9e639680ae1.png

显然没有标记出最大值的柱子

同时也提示执行有错误

如果我们查看图表的容器就能看出关键:

7443865c-f26d-4e0f-b0da-a6df2ead21c2.png

原来,seaborn 柱子分成2组。这是非常合理的

但数据范围索引,却是在整个数据共27行中查找

显然,我们需要是2组的范围索引:

bb0f9595-2e9d-4264-b9ba-c503b8fea3c1.png

语义非常清晰直白

但是,怎么准确从图表容器中找到需要的 BarContainer:

add6b2fc-e1c0-4759-9909-a6ff410f33cc.png

行7与行12:里面的 0 和 1 都是猜测的

原来,seaborn 在生成这些容器时,给容器的 label 属性写入了对应的数据值(就是我们数据的"type"字段):

e173a222-32a3-45d3-ba61-b0007fe383b4.png

注意,你不能使用 key 索引方式获取,比如写: axcontainers['修改'] ,这会报错

万事俱备,定义如下函数:

a603a805-7259-4bea-b330-b26e79b34c04.png

现在调用变得非常简单:

3846796b-b37d-4df6-9a98-6592ba60a9d9.png

图表成这样子:

2b005b60-300e-4db8-9942-b9c713c60493.png

接下来我会继续编写更多非常规要求的图表,敬请关注!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值