python 画条形图(柱状图)实例


Posted in Python onApril 24, 2020

条形图(bar chart),也称为柱状图,是一种以长方形的长度为变量的统计图表,长方形的长度与它所对应的变量数值呈一定比例。

1. 竖放条形图

画条形图要用到 pyplot 中的 bar 函数,该函数的基本语法为:

bar(x, height, [width], **kwargs)

x 数组,每个条形的横坐标
height 个数或一个数组,条形的高度
[width] 可选参数,一个数或一个数组,条形的宽度,默认为 0.8
**kwargs 不定长的关键字参数,用字典形式设置条形图的其他属性

**kwargs 中常设置的参数包括图形标签 label,颜色标签 color,不透明度 alpha 等。

假设某项针对男女大学生购买饮用水爱好的调查结果如下表:

碳酸饮料 6 9
绿茶 7 4
矿泉水 6 4
其他 2 6
果汁 1 5
总计 22 28

画出男生饮用水情况的直方图,代码如下:

import matplotlib.pyplot as plt

# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

waters = ('碳酸饮料', '绿茶', '矿泉水', '果汁', '其他')
buy_number = [6, 7, 6, 1, 2]

plt.bar(waters, buy_number)
plt.title('男性购买饮用水情况的调查结果')

plt.show()

图形:

python 画条形图(柱状图)实例

2. 横放条形图

若要生成横的条形图,则可以使用 barh 函数,其语法与 bar 函数非常类似。

bar(x, width, [height], **kwargs)

y 数组,每个条形的纵坐标
width 一个数或一个数组,条形的宽度
[height] 可选参数,一个数或一个数组,条形的高度,默认为 0.8
**kwargs 不定长的关键字参数,用字典形式设置条形图的其他属性

代码:

import matplotlib.pyplot as plt

# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

waters = ('碳酸饮料', '绿茶', '矿泉水', '果汁', '其他')
buy_number = [6, 7, 6, 1, 2]

plt.barh(waters, buy_number) # 横放条形图函数 barh
plt.title('男性购买饮用水情况的调查结果')

plt.show()

python 画条形图(柱状图)实例

3. 并列条形图

若要将男生与女生的调查情况画出两个条形图一块显示,则可以使用 bar 或 barh 函数两次,并调整 bar 或 barh 函数的条形图位置坐标以及相应刻度,使得两组条形图能够并排显示。

import matplotlib.pyplot as plt
import numpy as np

# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 输入统计数据
waters = ('碳酸饮料', '绿茶', '矿泉水', '果汁', '其他')
buy_number_male = [6, 7, 6, 1, 2]
buy_number_female = [9, 4, 4, 5, 6]

bar_width = 0.3 # 条形宽度
index_male = np.arange(len(waters)) # 男生条形图的横坐标
index_female = index_male + bar_width # 女生条形图的横坐标

# 使用两次 bar 函数画出两组条形图
plt.bar(index_male, height=buy_number_male, width=bar_width, color='b', label='男性')
plt.bar(index_female, height=buy_number_female, width=bar_width, color='g', label='女性')

plt.legend() # 显示图例
plt.xticks(index_male + bar_width/2, waters) # 让横坐标轴刻度显示 waters 里的饮用水, index_male + bar_width/2 为横坐标轴刻度的位置
plt.ylabel('购买量') # 纵坐标轴标题
plt.title('购买饮用水情况的调查结果') # 图形标题

plt.show()

python 画条形图(柱状图)实例

补充知识:Python 条形图与直方图有非常大的区别

区别:

首先,条形图是用条形的长度表示各类别频数的多少,其宽度(表示类别)则是固定的;

直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。

其次,由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列。

最后,条形图主要用于展示分类数据,而直方图则主要用于展示数据型数据,我们初中学的就是条形统计图,很显然有没有当初那种感觉?(身高-年龄 条形统计图)在坐标上画出每个年龄对应的频数。这就是我们研究数据分布最喜欢用的。如果还是有点蒙,下面相同数据对比一下这两种图像你就会明白!

数据:

年龄 0 1 2 3 4 5 6 7 8 9 10 总数
人数 3 6 7 11 13 18 15 11 7 5 4 100
条形统计图(注重每类多少个):

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文
plt.rcParams['axes.unicode_minus']=False #正常显示负号
 
# d=pd.read_excel('E:\Python\projects\data\data100.xlsx',header=None)
# d=d[0]
# d=list(d)
 
ages=range(11)
count=[3,6,7,11,13,18,15,11,7,5,4]
plt.bar(ages,count, label='graph 1')
# params
# x: 条形图x轴
# y:条形图的高度
# width:条形图的宽度 默认是0.8
# bottom:条形底部的y坐标值 默认是0
# align:center / edge 条形图是否以x轴坐标为中心点或者是以x轴坐标为边缘
plt.legend()
plt.xlabel('ages')
plt.ylabel('count')
plt.title(u'测试例子——条形图')
 
for i in range(11):
  plt.text(i,count[i]+0.1,"%s"%count[i],va='center')
 
plt.show()

python 画条形图(柱状图)实例

直方图:

import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文
plt.rcParams['axes.unicode_minus']=False #正常显示负号
# d=np.random.normal(0,1,100)
d=pd.read_excel('E:\Python\projects\data\data100.xlsx',header=None)
d=d[0]
d=list(d)
print(d)
n, bins, patches = plt.hist(x=d, bins=11, color='#0504aa',
        alpha=0.8, rwidth=0.6) #alpha 是颜色深度 rwidth 条形宽度,bins条形箱的数目
 
plt.grid(axis='y', alpha=0.4) #alpha 网格颜色深度
plt.xlabel('age')
plt.ylabel('count')
plt.title('100个样本分布如下')
plt.text(20, 40, r'$\mu=0, sigma=1$')#前面是坐标,写字
# plt.ylim(19) #设置y的范围
 
plt.show()

python 画条形图(柱状图)实例

对比两个图就能知道,条形图将类别对的死死的,但是直方图就用间隔来划分每一柱多少,虽然大体相差不大,但是对于数据研究那影响可大也可小。总之了解了区别才能避免不必要的犯错。

以上这篇python 画条形图(柱状图)实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编写检测数据库SA用户的方法
Jul 11 Python
初步解析Python下的多进程编程
Apr 28 Python
在Python中使用HTMLParser解析HTML的教程
Apr 29 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
使用python在本地电脑上快速处理数据
Jun 22 Python
Python调用C# Com dll组件实战教程
Oct 12 Python
Windows下python3安装tkinter的问题及解决方法
Jan 06 Python
python字符串下标与切片及使用方法
Feb 13 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
解析Tensorflow之MNIST的使用
Jun 30 Python
python3 hdf5文件 遍历代码
May 19 Python
python基础学习之递归函数知识总结
May 26 Python
python模拟哔哩哔哩滑块登入验证的实现
Apr 24 #Python
200行python代码实现贪吃蛇游戏
Apr 24 #Python
python Canny边缘检测算法的实现
Apr 24 #Python
python实现文字版扫雷
Apr 24 #Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 #Python
python3中sys.argv的实例用法
Apr 24 #Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 #Python
You might like
typecho插件编写教程(三):保存配置
2015/05/28 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
2020/11/09 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
python web框架学习笔记
2016/05/03 Python
python模块之re正则表达式详解
2017/02/03 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
Python多继承原理与用法示例
2018/08/23 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
ipad上运行python的方法步骤
2019/10/12 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
汽车维修专业自荐书
2014/05/26 职场文书
大学生在校表现评语
2014/12/31 职场文书
2015年人事专员工作总结
2015/04/29 职场文书
社区服务活动感想
2015/08/11 职场文书
2015团员个人年度总结
2015/11/24 职场文书
创业计划书之干洗店
2019/09/10 职场文书
MySQL七大JOIN的具体使用
2022/02/28 MySQL
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis