matlibplot之条形图

在这里插入图片描述

文本以及后续的系列文章中均会使用到numpy这个库,numpy是Python的一种开源的数值计算扩展,主要用来生产一些随机数作为绘图的原始数据。具体和安装matplotlib类似,可以参考安装Matplotlib这篇文章。


条形图:

长条图(英语:bar chart),亦称条图(英语:bar graph)、条状图、棒形图、柱状图、条形图表、条形图,是一种以长方形的长度为变量的统计图表。用水平或者垂直的条形图来展示各种分类间分散不连续的数字比较。通常利用于较小的数据集分析。长条图亦可横向排列,或用多维方式表达。

一、bar函数

1. 函数定义:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, \*, align='center', data=None, \*\*kwargs)
  1. 常用参数:
  • x:
    需要显示的数据,包含所有柱子的下标的列表,也就是每个柱子的标签;
  • height:
    包含所有柱子的高度值的列表
  • width:
    每个柱子的宽度。 可以指定一个固定值, 那么所有的柱子都是一样的宽。 或者设置一个列表, 这样可以分别对每个柱子设定不同的宽度
  • align:
    柱子对齐方式,有两个可选值:center 和 edge
  • color:
    柱子的颜色,可传入一个固定值或一个列表
  • edgecolor:
    柱子的边框颜色,可传入一个固定值或一个列表
  • linewidth:
    每根柱子的边框宽度。 如果没有设置,默认没有边框
  • tick_label:
    每根柱子上显示的标签, 默认是没有
  • log:
    对于y轴数据进行log操作,默认false;这个对于多个数据列表,数值差异较大的时候进行显示的时候有用

2、bar的详细定义:

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html?highlight=bar#matplotlib.pyplot.bar

二、示例说明:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']

men_means= (20, 35, 30, 35, 27)
women_means= (25, 32, 34, 20, 25)
 
#设置X轴上分组的位置,arange函数使用给定间隔内的均匀间隔的值来创建数组,产生[0,1,2,3,4]
ind = np.arange(len(men_means))  
#设置bar条的宽度
width = 0.35  
 
fig, ax = plt.subplots()
rects1 = ax.bar(ind - width/2, men_means, width, color='SkyBlue', label='男生')
rects2 = ax.bar(ind + width/2, women_means, width,color='IndianRed', label='女生')
 
#为增加X轴标签,为绘图区域添加标题
ax.set_ylabel('分数')
ax.set_title('各组分数')
plt.xticks(ind,('1组', '2组', '3组', '4组', '5组'))
ax.legend()
 
plt.show();

运行结果如下:

三、扩展应用

1、 柱体颜色

通过 facecolor(或fc) 关键字参数可以设置柱体颜色
通过 color 关键字参数 可以一次性设置多个颜色

import matplotlib.pylab as plt

x = [0,1,2,3,4]
y = [39,10,20,25,15]

fig = plt.figure()
# 生成第一个子图在1行2列第一列位置
ax1 = fig.add_subplot(121)
# 生成第二子图在1行2列第二列位置
ax2 = fig.add_subplot(122)

# 通过fc设置柱体的颜色
ax1.bar(x, y, width=0.5,fc = 'SkyBlue')
# 通过color分布设置各个柱体的颜色
ax2.bar(x, y,color=['b', 'g', 'r', 'c', 'm'])
plt.show()

运行结果如下:
在这里插入图片描述

2、设置柱体描边

相关的关键字参数为:

  • edgecolor(ec) 描边颜色
  • linestyle(ls)描边样式
  • linewidth(lw)描边宽度
import matplotlib.pyplot as plt
x = [0,1,2,3,4]
y = [39,10,20,25,15]
fig,ax = plt.subplots()
#设置描边的颜色,样式,宽度
ax.bar(x, y, ec='k', ls='-.', lw=5,color='#ADD8E6')
plt.show()

运行结果如下:
在这里插入图片描述

3、设置柱体描边填充

hatch 关键字可用来设置填充样式,可取值为: / , \ , | , - , + , x , o , O , . , *

import matplotlib.pyplot as plt
x = [0,1,2,3,4]
y = [39,10,20,25,15]
#设置填充的样式
plt.bar(x,y,hatch='o')
plt.show()

运行结果如下:
在这里插入图片描述

4、堆积条形图

通过 bottom 参数,可以绘制堆叠条形图,其中bottom参数决定了距离x轴的位置。通过堆积图可以有效的进行对比。

import matplotlib.pyplot as plt
import matplotlib
"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']

x = [1,2,3,4,5]
salary = [5,10,20,25,15]
parttime_income=[30,5,10,20,15]

# x轴的刻度为1-5月
labels =["{}月".format(item) for item in x]
fig,ax = plt.subplots(figsize=(12,6),dpi=80)
ax.bar(x,parttime_income,tick_label=labels,label='兼职收入')
ax.bar(x,salary,bottom=parttime_income,tick_label=labels,label="工资")

ax.legend()
plt.show()

运行结果如下:
在这里插入图片描述

5、并列条形图

通过并列条形图,可以直观的对比多个数据样本之间的差异。

import matplotlib.pyplot as plt
import matplotlib
"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']

#设置bar条的宽度
width = 0.4  
X = [1,2,3,4,5]
salary = [5,10,20,25,15]
parttime_income=[30,5,10,20,15]
# x轴的刻度为1-5月
labels =["{}月".format(item) for item in x]

fig,ax = plt.subplots(figsize=(12,6),dpi=80)
##绘制兼职收入的柱状图
ax.bar([x-width/2 for x in X],parttime_income,width,tick_label=labels,label='兼职收入')
ax.bar([x+width/2 for x in X],salary,width,tick_label=labels,label="工资")

ax.legend()
plt.show()

运行结果如下:
在这里插入图片描述

5、水平条形图

水平条形图通过barh函数进行绘制。

barh(bottom, width, height=0.8, left=None, **kwargs)
import matplotlib.pyplot as plt
import matplotlib
"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']

#设置bar条的宽度
width = 0.4  

X = [1,2,3,4,5]
salary = [5,10,20,25,15]
parttime_income=[30,5,10,20,15]

# x轴的刻度为1-5月
labels =["{}月".format(item) for item in x]

fig,ax = plt.subplots(figsize=(12,6),dpi=80)
##绘制兼职收入的柱状图
ax.barh([x-width/2 for x in X],parttime_income,width,tick_label=labels,label='兼职收入')
ax.barh([x+width/2 for x in X],salary,width,tick_label=labels,label="工资")

ax.legend()
plt.show()

6、正负条形图

通过左右两边进行数据的呈现

import matplotlib.pyplot as plt
import matplotlib
"""
font:设置中文
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']

#设置bar条的宽度
width = 0.4  

X = [1,2,3,4,5]
salary = [5,10,20,25,15]
parttime_income=[30,5,10,20,15]

# x轴的刻度为1-5月
labels =["{}月".format(item) for item in x]

fig,ax = plt.subplots(figsize=(12,6),dpi=80)
##绘制兼职收入的柱状图
ax.barh(X,parttime_income,width,tick_label=labels,label='兼职收入')
##通过列表生成式将salary的数据变为负值
ax.barh(X,[-s for s in salary],width,tick_label=labels,label="工资")

ax.legend()
plt.show()

在这里插入图片描述


总结

条形图简单直观,根据柱子的长短看出值的大小,易于比较各组数据之间的差别及走势,对应的优势

  • 1、能够使人们一眼看出各个数据的大小。
  • 2、易于比较数据之间的差别。

在实际的使用中容易将直方图和条形图混淆,这两者图形的主要区别如下:
条形图与直方图的区别是:

  • 1、条形图是用条形的高度表示频数的大小,而直方图实际上是用长方形的面积表示频数,当长方形的宽相等的时候可以用矩形的高表示频数;
  • 2、条形图中,横轴上的数据是孤立的,是一个具体的数据,而直方图中,横轴上的数据是连续的,是一个范围;
  • 3、条形图中,各长方形之间有空隙,而直方图中,各长方形是靠在一起的
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值