matplotlib画柱状图

柱状图bar 

柱状图(Bar Chart)是一种以长方形的长度为变量的表达图形的统计报告图,是由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或两个以上的价值(不同时间或者不同条件),只有一个变量,通常适用于较小的数据集分析。柱状图亦可横向排列,或用多维方式表达。

1. 主要函数

1.1. bar

pyplot中绘制柱状图的函数为bar,其语法格式如下。

  matplotlib.pyplot.bar(x,height,*,align='center',**kwargs)

  matplotlib.pyplot.bar(x,height,width,*,align='center',**kwargs)

  matplotlib.pyplot.bar(x,height,width,bottom,*,align='center',**kwargs)

函数中的主要参数说明如下。

*■ x:接收array。表示x轴的数据,无默认。

*■ height:接收array。表示x轴所代表数据的数量,无默认。

■ width:接收0~1之间的float,指定柱状图宽度,默认为0.8。

■ bottom:接收array,可选,柱状图的y坐标,默认值为0。

■ align:取值为center或edge,可选,默认为center,表示柱状图对齐x坐标。

■ color:接收特定string或者包含颜色字符串的array,表示柱状图颜色,默认为None。

■ edgecolor:接收特定string或者包含颜色字符串的array,表示柱状图的边框颜色。

*■ tick_label:柱状图的刻度标签

更多参数见下图

  

2. 例子 

2.1. 标准例子

import numpy as np
import matplotlib.pyplot as plt
#导入数据
Emp_data= np.loadtxt('d:\data\Employedpopulation.csv',delimiter = ",",
                    usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)
 
# 设置Matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号
 
#创建一个绘图对象, 并设置对象的宽度和高度
plt.figure(figsize=(6, 4))
#绘制全部就业人员柱状图
plt.bar(Emp_data[0],Emp_data[1],width = 0.35,color = 'red',
        edgecolor = 'white')
#绘制城镇就业人员柱状图
plt.bar(Emp_data[0]+0.35,Emp_data[2],width = 0.35,color = 'green',
        edgecolor = 'white')
#绘制乡村就业人员柱状图
plt.bar(Emp_data[0]+0.7,Emp_data[3], width = 0.35,color = 'blue',
        edgecolor = 'white')
# 给图加text
X = Emp_data[0];Y1 = Emp_data[1]
for x, y in zip(X, Y1):
    plt.text(x + 0.3, y + 0.05, '%i' % y, ha='center')
Y2 = Emp_data[2]
for x, y in zip(X, Y2):
    plt.text(x + 0.6, y + 0.05, '%i' % y, ha='center')
Y3 = Emp_data[3]
for x, y in zip(X, Y3):
    plt.text(x + 0.9, y + 0.05, '%i' % y, ha='center')
#添加标签
plt.xlabel('年份')
plt.ylabel('人员(万人)')
plt.ylim((30000,80000))
plt.xlim(2006,2017)
plt.title("2007-2016年城镇、乡村和全部就业人员情况柱状图")
#添加图例
plt.legend({'全部就业','城镇就业','乡村就业'})
plt.savefig('d:/data/Employedpopulation_bar.png')
plt.show()

2.2. 简洁例子

import matplotlib.pyplot as plt 
import numpy as np
import matplotlib.pyplot as plt

 
# 设置Matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号
  
num_list = [1.5,0.6,7.8,6]  
plt.bar(range(len(num_list)), num_list,color=['r','b','g','y'])  
plt.show()  

 

2.3. 2个bar左右排列

import matplotlib.pyplot as plt  
 
name_list = ['Monday','Tuesday','Friday','Sunday']  
num_list = [1.5,0.6,7.8,6]  
num_list1 = [1,2,3,1]  
x =list(range(len(num_list)))  
total_width, n = 0.8, 2  
width = total_width / n  
  
plt.bar(x, num_list, width=width, label='boy',fc = 'y')  
for i in range(len(x)):  
    x[i] = x[i] + width  
plt.bar(x, num_list1, width=width, label='girl',tick_label = name_list,fc = 'r')  
plt.legend()  
plt.show()

2.4. 2个bar上下排列

import numpy as np
import matplotlib.pyplot as plt
 
n = 12
X = np.arange(n)
Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
 
plt.axes([0.025,0.025,0.95,0.95])
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
 
for x,y in zip(X,Y1):
    plt.text(x+0.4, y+0.05, '%.2f' % y, ha='center', va= 'bottom')
 
for x,y in zip(X,Y2):
    plt.text(x+0.4, -y-0.05, '%.2f' % y, ha='center', va= 'top')
 
plt.xlim(-.5,n), plt.xticks([])
plt.ylim(-1.25,+1.25), plt.yticks([])
plt.show()

 

2.5. 2个bar上下

import matplotlib.pyplot as plt
import numpy as np
 
n = 12
X = np.arange(n)
Y1 = (1-X/(float(n))*np.random.uniform(0.5,1.0,n))
Y2 = (1-X/(float(n))*np.random.uniform(0.5,1.0,n))
 
plt.bar(X,+Y1,facecolor='r',edgecolor='w')
plt.bar(X,-Y2,facecolor='b',edgecolor='w')
 
for x,y in zip(X,Y1):
    plt.text(x-0.1,y+0.05,'%.2f'%y,ha='center',va='bottom')  #居中对齐
for x,y in zip(X,Y2):
    plt.text(x+0.1,-y-0.05,'-%.2f'%y,ha='center',va='top')
 
plt.xlim((-0.5,n))
plt.ylim((-2,2))
plt.xticks(())
plt.yticks(())
plt.show()

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值