柱状图
使用bar函数可以绘制柱状图,柱状图需要水平的x坐标值,以及每一个x坐标值对应的y坐标值,从而形成柱状的图
bar函数的宽度并不是像素宽度,bar函数会根据二维坐标系的尺寸,以及x坐标值的多少,自动确定每一个柱的宽度,而width指定的宽度就是这个标准柱宽度的倍数,该参数值可以是浮点数,如0.5,表示柱的宽度是标准宽度的0.5倍
# 绘制柱状图 import matplotlib.pyplot as plt x=[1997,1998,1999,2000] x_labels=['1997年','1998年','1999年','2000年'] y=[1000,3000,4000,5000] plt.bar(x,y,width=0.1) plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.xticks(x,x_labels) # 设置x轴的刻度,rotation旋转角度 plt.xlabel('年份') plt.ylabel('销量') plt.title('根据年份销量对比图') plt.savefig('柱状图.jpg') plt.show()
使用bar和barh绘制柱状图
# 使用bar和barh绘制柱状图 import matplotlib.pyplot as plt import numpy as np np.random.seed(0) #使每次运行时的随机数不变 x=np.arange(5) #范围为5 y=np.random.randint(-5,5,5) print(x,y) #输出为 [0 1 2 3 4] [ 0 -5 -2 -2 2] plt.subplot(1,2,1) #将画布分隔成一行两列 选中第一列 # 在第一列中画图 v_bar=plt.bar(x,y) # 在第一列的画布中 0位置画一条蓝线 plt.axhline(0,color='blue',linewidth=2) plt.subplot(1,2,2) #将画布分隔成一行两列 选中第二列 # barh将y和x轴对换 竖着方向为x轴 h_bar=plt.barh(x,y,color='red') # 在第二列的画布中0位置处画红色的线 plt.axvline(0,color='red',linewidth=2) plt.savefig('柱状图2.jpg') plt.show()
练习:
1、三天中三部电影的票房
#三天中三部电影的票房变化 import matplotlib.pyplot as plt import numpy as np real_names=['千与千寻','中国合伙人','大话西游'] real_num1=[5453,7548,6543] real_num2=[1840,4013,3421] real_num3=[1080,1673,2342] #生成x 第1天 第2天 第3天 x=np.arange(3) x_label=['第{}天'.format(i+1) for i in range(3)] plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 #绘制柱状图 width=0.3 #设置柱的宽度 plt.bar(x,real_num1,color='g',width=width,label=real_names[0]) plt.bar([i+width for i in x],real_num2,color='b',width=width,label=real_names[1]) plt.bar([i+2*width for i in x],real_num3,color='r',width=width,label=real_names[2]) #修改x坐标 plt.xticks([i+width for i in x],x_label) #添加图例 plt.legend() #添加标题 plt.title('3天的票房数') plt.savefig('柱状图3.jpg') plt.show()
2、柱形图的边框颜色添加(通过edgecolor的设置)
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 plt.figure(figsize=(8,6)) plt.bar([1,3,5,7,9,11],[5,2,7,8,2,6],align = 'center',label="Example one",color = 'y',edgecolor = 'r') plt.bar([2,4,6,8,10,12],[8,6,2,5,6,3], label="Example two", color='g',edgecolor = 'r') plt.legend() plt.xlabel('bar number') plt.ylabel('bar height') #设置x轴刻度标签 plt.xticks(np.arange(1,13),[str(i)+'月' for i in range(1,13)]) plt.title('') plt.show()
3、给柱形图的每个柱子添加数字标签,plt.text()在对应位置添文字说明来生成相应的数字标签
标签的对齐方式:verticalalignment设置水平对齐方式 ,可选参数 : 'center','top' , 'bottom' ,'baseline'
horizontalalignment设置垂直对齐方式,可选参数:left,right,center
柱子的位置:align='edge'——柱形图的边线对准刻度
align='center'——柱形图的中心对准刻度
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 = [1, 2, 3] y1 = [600, 700, 800] y2 = [500, 900, 1000] plt.figure(figsize=(8, 5)) plt.bar(x, y1, 0.1, align='edge', label="进口 单位/美元", color='y') plt.bar(x, y2, -0.1, align='edge', label="出口 单位/美元", color='r') for m, n in zip(x, y1): plt.text(m + 0.08, n + 10, '%.2f' % n, ha='center', va='bottom') # ha='center', va= 'bottom'代表horizontalalignment(水平对齐)、verticalalignment(垂直对齐) for m, n in zip(x, y2): plt.text(m - 0.08, n + 10, '%.2f' % n, ha='center', va='bottom') plt.legend() plt.xlabel('第一季度/月') plt.ylabel('进出口额/美元') # 设置x轴刻度标签 plt.xticks(np.arange(1, 4), [str(i) + '月' for i in range(1, 4)]) plt.title('第一季度进出口数据') plt.show()