使用matplotlib绘制并排柱状图的实战案例

 更新时间:2022年07月01日 12:05:04   作者:林老头ss  
堆积柱状图有堆积柱状图的好处,比如说我们可以很方便地看到多分类总和的趋势,下面这篇文章主要给大家介绍了关于使用matplotlib绘制并排柱状图的相关资料,需要的朋友可以参考下

一、概念说明

柱状图(bar chart),从相同的横坐标出发,以不同的数值大小来设定柱子的高度,进而表示无序或有序的定性数据间某个定量指标的大小关系。

示意图如下:

(1) 在无序的横坐标情景下,我们常常根据数值大小降序排布。

(2) 柱状图在纵坐标上可以有正有负,但必须以基准的0线开始绘制,否则会传递错误的视觉信息。

(3) 当类别间数值差异较大/类别较多/类别命名文本较长时,我们可以考虑将柱形图逆转90°,即使用条形图。

(4)如果手中的数据是二维定性的情况,可以根据需求分别选择堆叠柱状图或者并排柱状图。

 ①堆叠柱状图:

        --- 关注类0-4的大类总量的对比

        --- 同时关注小类a/b占大类的比重

② 并排柱状图(案例对象)

 

         --- 更关注小类系列1-3在不同大类1-4间的对比

         --- 关注小类在大类间数值分布的差异

         --- 如果要呈现大类总量信息,可以增加折线图

二、数据展示

在本案例中, 我们是希望使用python编码,利用其中matplotlib包绘制并排柱状图,因此我们需要二维定序数据。

根据我专栏其它的案例呢,还是继续使用随机选的八座城市,目的是希望了解八座城市小初高学校数量对比(柱状),以及人口数情况(折线)。

秉持城市统计公报中有就记录,无就百度的原则,得到以下仅供绘图的数据。

上述excel表格的数据分别存放,利用下述代码我们将其导入

import pandas as pd
school_num = pd.DataFrame(pd.read_excel('./小初高学校个数.xlsx'))
people_num = pd.DataFrame(pd.read_excel('./2020人口普查数据.xlsx'))

三、图像绘制

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
 
# 中文和正负号设置
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
 
x = np.arange(8)
bar_width = 0.3
tick_label = school_num['城市']
plt.figure(figsize=(13,7))
# 柱状
plt.bar(x, school_num['小学'], bar_width, align="center", color="#2bb179", label='小学', alpha=0.5)
plt.bar(x+bar_width, school_num['初中'], bar_width, color="b", align="center", label="初中", alpha=0.5)
plt.bar(x+bar_width*2, school_num['高中'], bar_width, color="orange", align="center", label="高中", alpha=0.5)
# 折线
plt.plot(x+bar_width, people_num['人数-万'], color="#ff796c", marker='o', lw=2,label='人口普查数(万)')
 
text_x = [x,x+bar_width,x+bar_width*2]
text_x = [text_x[i][j]  for i in range(3) for j in range(8) ]
text_y = [school_num['小学'],school_num['初中'],school_num['高中']]
text_y = [text_y[i][j]  for i in range(3) for j in range(8) ]
plt.xticks(x+bar_width, tick_label,fontsize=18)
plt.yticks(fontsize=18)
plt.xlabel("城市",fontsize=20)
plt.ylabel("学校数量",fontsize=20)
plt.legend(fontsize=16)
plt.grid()
 
# 柱型加数字
for x,y,text in zip(text_x,text_y,text_y):
    plt.text(x-0.12,y+15,str(text),fontsize=12)
 
# plt.savefig(r'./并排柱状图示例.png')

 plt.bar(横坐标位置,柱子数值)  ---  横坐标位置一般用np.arange(横坐标类别数)得到,因此在并排中,每一个小类,都要右移窗宽个单位,如果您觉得紧挨着显得很密,也可以加0.1让它们稍稍隔开。

plt.plot 的横坐标我选择x+bar_width是因为我们有三个柱子,我希望折线的原点是对应横坐标居中显示。

plt.text  ---  这一部分是给整幅图加文字,但具体加在什么位置需要自己指定。

plt.xticks(原名称,新名称)

绘制结果:

 希望对您有所帮助~

总结

到此这篇关于使用matplotlib绘制并排柱状图的文章就介绍到这了,更多相关matplotlib绘制并排柱状图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何基于matlab相机标定导出xml文件

    如何基于matlab相机标定导出xml文件

    这篇文章主要介绍了如何基于matlab相机标定导出xml文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Python tabulate结合loguru打印出美观方便的日志记录

    Python tabulate结合loguru打印出美观方便的日志记录

    在开发过程中经常碰到在本地环境无法完成联调测试的情况,必须到统一的联机环境对接其他系统测试。往往是出现了BUG难以查找数据记录及时定位到错误出现的位置。本文将利用tabulate结合loguru实现打印出美观方便的日志记录,需要的可以参考一下
    2022-10-10
  • 简单了解Django ORM常用字段类型及参数配置

    简单了解Django ORM常用字段类型及参数配置

    这篇文章主要介绍了简单了解Django ORM常用字段类型及参数配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python如何实现异步调用函数执行

    python如何实现异步调用函数执行

    这篇文章主要介绍了python如何实现异步调用函数执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python实现记事本功能

    python实现记事本功能

    这篇文章主要为大家详细介绍了python实现记事本功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • pytorch逐元素比较tensor大小实例

    pytorch逐元素比较tensor大小实例

    今天小编就为大家分享一篇pytorch逐元素比较tensor大小实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python基于QRCode实现生成二维码的方法【下载,安装,调用等】

    Python基于QRCode实现生成二维码的方法【下载,安装,调用等】

    这篇文章主要介绍了Python基于QRCode实现生成二维码的方法,结合实例形式较为详细的分析了Python下载,安装与调用QRCode实现生成二维码功能的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • Python使用pickle模块存储数据报错解决示例代码

    Python使用pickle模块存储数据报错解决示例代码

    这篇文章主要介绍了Python使用pickle模块存储数据报错解决示例代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 定制FileField中的上传文件名称实例

    定制FileField中的上传文件名称实例

    下面小编就为大家带来一篇定制FileField中的上传文件名称实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 基于Python利用Faker批量测试数据

    基于Python利用Faker批量测试数据

    这篇文章主要介绍了基于Python利用Faker批量测试数据。测试过程中,经常需要批量去造数据,方法有很多,最简单方便的应该是使用python 的一个三方库Faker。下面我们就来看看三方库Faker如何批量测试数据,需要的朋友可以参考一下
    2022-03-03

最新评论