Matplotlib基本原理以及若干种绘图方法

Matplotlib学习笔记

一、Matplotlib基础原理

1.Matplotlib图片结构

  • matpilotlib构图主要分为三个部分,figure(画布)、axes(坐标系)、axis(坐标)
  • figure可以看做我们构图的画版,而axes坐标系是我们构图的框架,axis则是我们在框架中的不同坐标中填充颜料,下面我们来讲解一下基本使用

二、figure创建图片基本使用方法

*首先要导入matplotlib的相关包

 import matplotlib as mpl
 import matplotlib.pyplot as plt
  • 由于matplotlib中不直接支持中文标签的显示,但是提供了转换成中文的方法,所以在一开始我们要首先用mpl.rcParams来设置我们的中文模式
mpl.rcParams["font.family"] = "SimHei" # 用来设置字体
mpl.rcParams["axes.unicode_minus"]=False # 用来正常显示负号
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
  • 下面我们来构建matlibplot的整个框架
 figure = plt.figure() #创建画布
 axes1 = figure.add_subplot(2,1,1)#如果我们在一张画布中要有两个坐标图,我们就用.add_subplot来添加
 axes2 = figure.add_subplot(2,1,2)#(2,1,1)这个是坐标
  • 下面我们要填充坐标系
axes1.plot([1,3,8,7],[4,9,6,8])#图一的横坐标和纵坐标
axes2.plot([1,2,4,6],[8,4,6,2])
figure.show()#显示图片

上面所写的方法是一种基础写法,下面我们来介绍下快速的构图方法

三、matplotlib的几种构图方法

1.`折线图

import matplotlib.pyplot as plt
x=range(2,26,2)     #x轴坐标
y=[15,13,14.5,17,20,25,26,26,27,22,18,15]    #y轴坐标
plt.plot(x,y)                 # 通过plot画出折线
plt.title("温度的变化")        # 设置折线标题
plt.xticks(x)         # 设置x的刻度,同理有yticks
plt.xlabel('month')    # 设置x轴标签
plt.ylabel('price')     # 设置y轴标签
plt.title("温度的变化",fontproperties='simhei',fontsize = 20) #在编程中用fontproperties也可以修改字体
plt.savefig("test.png") #将输出图形存储为文件,默认PNG格式,可以通过dpi修改输出质量。 
plt.show()          # 显示折线

plt.plot(x, x, color='red', linestyle='-', marker='o', label='line1')//对折线图的细节设置
plt.plot(x, x+2, color='green', linestyle='--', marker='v', label='line2')
plt.plot(x, x**2, color='blue', linestyle='--', marker='s', label='line3')

*字体颜色几种基本的字体颜色
标记和线段样式
在这里插入图片描述

  • 在这个方法里面我们没有使用figure的概念,这是一种隐式创建figure对象,当第一次执行plt.xxx()这句绘图代码时,系统会去判断是否已经有了figure对象,如果没有,系统会自动创建一个figure对象,并且在这个figure之上,自动创建一个axes坐标系(注意:默认创建一个figure对象,一个axes坐标系),所以我们可以直接做出图像系统会自动创建。
    *表示y的范围用ylim,同理x
    plt.ylim(-1.5,1.5);

2.多子图

mport matplotlib.pyplot as plt
x=[2,4,6,8,10,12]
y=[41,43,45,50,43,41]
plt.subplot(2,1,1)     #(2行1列,第1个区域)
plt.plot(x,x,color='red')
#plt.legend(loc='upper left')#用来显示标签
plt.savefig("test2.png")
plt.subplot(2,1,2)     #(2行1列,第2个区域)
plt.plot(y,y,color='green')
plt.savefig("test3.png")
plt.show()

在这里插入图片描述

3.绘制X轴、Y轴平行线

语法格式
绘制X轴平行线
plt.axhline(y,xmin,xmax)
绘制Y轴平行线
plt.axvline(x,ymin,ymax)

4.绘制柱形图

  • 柱状图通过使用水平或垂直方向柱子的高度来显示不同类别的数值,其中柱状图的一个轴显示正在比较的类别,而另一个轴代表对应的刻度值。
  • 我们通过bar(x, height, width, color, align, yerr)函数可以绘制柱状图。其中
    (1)x:表示x轴的位置序列,一般采用range函数产生一个序列;
    (2)y:表示y轴的数值序列,也就是柱形图的高度,一般就是我们需要展示的数据;
    (3)width:为柱形图的宽度,一般这是为1即可;
    (4)color:为柱形图填充的颜色;
    (5)yerr:让柱形图的顶端空出一部分。
    (6)alpha:设置柱状填充颜色的透明度。
import matplotlib.pyplot as plt
x_lable=["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]
x = range(len(x_lable)) 
y=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]
plt.bar(x,y,width=0.2)
plt.xticks(x,x_lable,fontproperties='simhei',rotation=90)  #设置坐标轴,并将文字旋转90度。
plt.xlabel('片名',fontproperties='simhei')
plt.ylabel('票房',fontproperties='simhei')
plt.savefig("test5.png")
plt.show()

在这里插入图片描述
*绘制横向的图用
plt.barh(x,y,tick_label = label);

5.绘制饼图

*我们通过plt.pie (x, explode, labels, autopct, shadow, startangle)函数可以绘制散点图。其中
(1)x表示数据
(2)explode表示突出的部分
(3)labels表示标签
(4)autopct设置每个部分显示的比例值(格式化)。,%0.1%% 保留一位小数
(5)shadow表示是否显示阴影bool
(6)pctdistance表示数据标签的距离圆心位置 0~1
(7)labeldistance表示标签的比例。
(8)startangle 表示开始绘图的角度
(9)radius表示半径长,默认是1

import matplotlib.pyplot as plt
labels = 'Frogs' , 'Hogs', 'Dogs', 'Logs'
x = [15,30,45,10]
explode = (0,0.1,0,0)
plt.pie(x,explode=explode,labels=labels,autopct='%1.1f%%',
shadow=False, startangle=90)
plt.axis('equal')
plt.savefig("test8.png")
plt.show()

饼图

5.绘制散点图

*散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或坐标点的分布情况。判断变量之间是否存在关联趋势,判断离群点。

*我们通过plt.scatter (x, y, s, c, marker, alpha,edgecolors)函数可以绘制散点图。其中
(1)x,y:表示的是x轴和y轴的坐标,也就是我们即将绘制散点图的数据点坐标。
(2)s:是一个实数,表示点的大小。
(3)c:表示的是颜色。
(4)marker:表示点形状,默认的是’o’。
(5)alpha:是一个实数,表示点的透明度。
(6)edgecolors表示每个散点外轮廓的颜色。

import matplotlib.pyplot as plt
import numpy as np
x= range(0,31,1)
y3=[11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y10=[8,26,28,19,21,17,16,19,18,20,20,19,22,23,10,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
plt.scatter(x,y3,marker='o')
plt.scatter(x,y10,marker='x')
plt.xlabel('day')
plt.ylabel('temperture')
plt.savefig("test4.png")
plt.show()

散点图

带误差的折线图

  • plt.errorbar(x=[1, 2, 3, 4], y=[1, 2, 3, 4], yerr=1)
  • yerr参数用于指定y轴水平的误差,同时该方法也支持x轴水平的误差,对应参数xerr。指定误差值有多种方式,上述代码展示的是指定一个统一标量的用法,此时,所以的点误差值都一样。
    1. fmt
      fmt参数的值和plot方法中指定点的颜色,形状,线条风格的缩写方式相同,示例如下
      plt.errorbar(x=[1, 2, 3, 4], y=[1, 2, 3, 4], yerr=1, fmt=‘co–’)
  • 默认的图中只有线条这一元素,所以当我们指定了点的属性时,如果不指定线条的风格等属性,则对应的属性为空,线条元素不会显示,示例如下
    plt.errorbar(x=[1, 2, 3, 4], y=[1, 2, 3, 4], yerr=1, fmt=‘co’)
  • ecolor
    ecolor参数指定error bar的颜色,可以和折线的颜色加以区分,用法如下
    plt.errorbar(x=[1, 2, 3, 4], y=[1, 2, 3, 4], yerr=1, fmt=‘co–’, ecolor=‘g’)
  • elinewidth
    elinewidth参数指定error bar的线条宽度,用法如下
    plt.errorbar(x=[1, 2, 3, 4], y=[1, 2, 3, 4], yerr=1, fmt=‘ro-’,ecolor=‘k’,elinewidth=10)
  • errorevery
    errorevery参数用于指定误差线的抽样频率,默认情况下,每个点的误差线都会显示,当点很多且密集分布时, 每个点都显示误差线的话,就很难看出有效的信息
    plt.errorbar(x=range(100), y=range(100),yerr=50)

6.直方图

plt.hist(data, bins=30,histtype=‘stepfilled’, density=True)
hist的参数非常多,但常用的就这六个,只有第一个是必须的,后面四个可选

  • arr: 需要计算直方图的一维数组
  • bins: 直方图的柱数,可选项,默认为10
  • normed: 是否将得到的直方图向量归一化。默认为0
  • facecolor: 直方图颜色
  • edgecolor: 直方图边框颜色
  • alpha: 透明度
  • histtype: 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’
  • density :密度
    返回值 :
  • n: 直方图向量,是否归一化由参数normed设定
  • bins: 返回各个bin的区间范围
  • patches: 返回每个bin里面包含的数据,是一个list

绘制某区域

x = np.linspace(0.05, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.axvspan(xmin=4, xmax=6, facecolor=‘r’, alpha=0.3) # 垂直x轴
plt.axhspan(ymin=-0.2, ymax=0.2, facecolor=‘y’, alpha=0.3); # 垂直y轴在这里插入图片描述

7.补充

*如果想设置背景网格可以用grid
plt.grid(True,axis=“y”)
*设置绘图模式背景模式
plt.style.use(‘fivethirtyeight’)
*保存图像
pi:每英寸分辨率点数。
facecolor:设置图像的背景色。
bbox_inches:设置为tight,可以紧凑保存图像,删除figure周围的空白部分

plt.savefig("image1.png",dpi=100,facecolor="g",bbox_inches="tight")

*设置画布大小及透明度
plt.figure(figsize=(6,5),dpi=100)

  • python画图时给图中的点加标签之plt.text
    plt.text(x, y, s, fontsize, verticalalignment,horizontalalignment,rotation , **kwargs)
    x,y表示标签添加的位置,默认是根据坐标轴的数据来度量的,是绝对值,也就是说图中点所在位置的对应的值,特别的,如果你要变换坐标系的话,要用到transform=ax.transAxes参数。
    s表示标签的符号,字符串格式,比如你想加个“我爱武汉”,更多的是你标注跟数据有关的主体,你如实写便是。
    fontsize顾名思义就是你加标签字体大小了,取整数。
    verticalalignment表示垂直对齐方式 ,可选 ‘center’ ,‘top’ , ‘bottom’,‘baseline’ 等
    horizontalalignment表示水平对齐方式 ,可以填 ‘center’ , ‘right’ ,‘left’ 等
    rotation表示标签的旋转角度,以逆时针计算,取整, family 用来设置字体,style 设置字体的风格,weight 字体的粗细, bbox 给字体添加框,如 bbox=dict(facecolor=‘red’, alpha=0.5) 等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值