博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二、Python开发---40、matplotlib(3)

Posted on 2020-03-11 23:46  兰智杰  阅读(340)  评论(0编辑  收藏  举报

柱状图

  使用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()