一、Matplotlib基础知识

Matplotlib中的基本图表包括的元素

  • x轴和y轴 axis 水平和垂直的轴线

  • 轴标签 axisLabel 水平和垂直的轴标签

  • x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括最小刻度和最大刻度

  • x轴和y轴刻度标签 tick label 表示特定坐标轴的值

  • 绘图区域(坐标系) axes 实际绘图的区域

  • 画布 figure 呈现所有的坐标系

figure>axes(坐标系)>axis(坐标轴)+tick+label+title
最外面是 画布对象(里面可以有子画布也可以没有)
画布里面有坐标系

  1. import numpy as np
  2. import pandas as pd
  3. from pandas import Series,DataFrame
  4. import matplotlib.pyplot as plt

只含单一曲线的图

  1. x = np.arange(-np.pi,np.pi,0.1)
  2. y = np.sin(x)
  3. plt.plot(x,y) # 绘图函数 默认绘制折线图

包含多个曲线的图

1、可以使用多个plot函数(推荐),在一个图中绘制多个曲线

  1. x1 = np.arange(-np.pi,0,0.1)
  2. plt.plot(x1,np.sin(x1))
  3. x2 = np.arange(0,np.pi,0.1)
  4. plt.plot(x2,np.sin(x2))

2、也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线

  1. x1 = np.arange(-np.pi,0,0.1)
  2. x2 = np.arange(0,np.pi,0.1)
  3. plt.plot(x1,np.sin(x1),x2,np.sin(x2)) # 也可以在一个plot函数中将多个 x和y的对应关系 连着写

得到的结果与上图一致

子画布

axes = plt.subplot()

  1. x = np.arange(-np.pi,np.pi,0.1)
  1. axes1 = plt.subplot(2,2,1)# 参数1指的是把画布纵向分成几份 参数2指的是把画布横向分成几份 参数3指的是占用第几个(从1开始)
  2. axes2 = plt.subplot(2,2,3)
  3. axes3 = plt.subplot(2,2,3)
  4. axes4 = plt.subplot(2,2,4)
  5. axes1.plot(x,np.sin(x)) # 坐标系axes对象的plot方法 使用起来和之前的画布fig的plot方法一样
  6. axes2.plot(x,np.cos(x))
  7. axes3.plot(x,np.tan(x))
  8. axes4.plot(x,np.sin(x)/np.cos(x))
  9. # 如果subplot中指定的 坐标系 有重叠
  10. # 如果完全重叠 就花到同一个坐标系里面
  11. # 如果没有完全重叠 并且 位置上有冲突 后面的会把签名的覆盖

网格线

使用plt.grid方法可以开启网格线,使用plt面向对象的方法,创建多个子图显示不同网格线

  • axis显示轴向
  • color代表颜色
  • alpha表示线的明暗程度
  • lw代表linewidth,线的粗细
  1. plt.plot()
  2. plt.grid() # 网格线
  1. axes1 = plt.subplot(4,4,1)
  2. axes2 = plt.subplot(4,4,6)
  3. axes3 = plt.subplot(4,4,11)
  4. axes4 = plt.subplot(4,4,16)
  5. # 给子画布中的图 添加网格线
  6. # plt.grid() # 使用plt调用grid只会给最后一个子画布 添加网格线 (应该是让axes对象去调用)
  7. axes1.grid(axis='x') # axis='both'指的是 x和y都会引出网格线
  8. axes2.grid(axis='y')
  9. axes3.grid(color='red',alpha=0.3,linewidth=5)
  10. # axes.grid()

坐标轴的轴线

plt.axis([xmin,xmax,ymin,ymax])

  1. # axes 坐标系
  2. # axis 轴线
  3. x = np.linspace(-1,1,100)
  4. y = (1-x**2)**0.5
  5. plt.plot(x,y)
  6. plt.plot(x,-y)
  7. # plt.axis([-5,2,-2,10]) # [xmin, xmax, ymin, ymax] 可以控制x和y的显示范围
  8. plt.axis([-1,1,-1,1])

plt.axis('xxx') 'off'、'equal'……

  • 设置坐标轴类型
  • 关闭坐标轴
  1. x = np.linspace(-1,1,100)
  2. y = (1-x**2)**0.5
  3. plt.plot(x,y)
  4. plt.plot(x,-y)
  5. # plt.axis([-5,2,-2,10]) # [xmin, xmax, ymin, ymax] 可以控制x和y的显示范围
  6. plt.axis('equal') # 让x和y的间距相等
  7. plt.axis('off') # 去掉坐标轴线

xlim方法和ylim方法

  • 除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围
  1. x = np.linspace(-1,1,100)
  2. y = (1-x**2)**0.5
  3. plt.figure(figsize=(5,5)) # 设置画布的大小
  4. plt.plot(x,y)
  5. plt.plot(x,-y)
  6. # plt.xlim((-2,2)) # x轴的取值范围
  7. # plt.ylim((-2,2)) # y轴的取值范围
  8. plt.axis([-5,5,-5,5])

坐标轴的标签

plt.xlabel( )方法 和 plt.ylabel( )方法
例如 plt.ylabel('y = x^2 + 5',rotation = 60)

  • color 标签颜色
  • fontsize 字体大小
  • rotation 旋转角度
  1. x = np.arange(10)
  2. y = x**2+5
  3. plt.plot(x,y)
  4. # plt.xlabel('x_label') # s string 字符串 必须传 x的标题
  5. # plt.ylabel('y=x^2+5')
  6. # plt.ylabel('y=x^2+5',color='r',fontsize=20,rotation=45) # color颜色 fontsize字号 rotation旋转
  7. plt.xlabel('x_label',color='r',fontsize=20,rotation=45)
  8. plt.ylabel('y=x^2+5',color='r',fontsize=20,rotation=90,alpha=0.5) # y默认就是90度

画布的标题

plt.title()方法

  • loc 标题位置{left,center,right}
  • color 标题颜色
  • fontsize 字体大小
  • rotation 旋转角度
  1. x = np.arange(10)
    plt.plot(x,x)
  2. # plt.title('title')
  3. plt.title('标题',fontproperties='KaiTi',fontsize=20,color='red',alpha=0.3,rotation=45,loc='right') # 建议平时就使用英文 很多地方对中文支持都不好

图例

legend方法

两种传参方法:

  • 分别在plt.plot( )函数中增加label参数,再调用plt.legend( )方法显示
  • 直接在legend方法中传入字符串列表 如:plt.legend(['normal','fast','slow'])
  1. x = np.arange(10)
  2. plt.plot(x,x)
  3. plt.plot(x,2*x)
  4. plt.plot(x,x/2)
  5. plt.legend(['normal','fast','slow']) # 列表中的顺序 要和上面画线的顺序一样

  1. plt.plot(x,x,label='normal')
  2. plt.plot(x,2*x,label='fast')
  3. plt.plot(x,x/2,label='slow')
  4. plt.legend()

loc参数

  • loc参数用于设置图例的位置,一般在legend函数内
  • matplotlib已经预定义好几种数字表示的位置

loc参数还可以是2元素的列表,表示图例左下角的坐标

  • [0,0] 左下
  • [0,1] 左上
  • [1,0] 右下
  • [1,1] 右上

图例也可以超过图的界限loc = (-0.1,0.9)

  1. data = np.random.randint(0,100,size=(10,3))
  2. df = DataFrame(data,columns=list('ABC'))
  3. df
  4. plt.plot(df['A'])
  5. plt.plot(df['B'])
  6. plt.plot(df['C'])
  7. # plt.legend(['A','B','C'],loc=10) # 如果不设置 loc参数 默认 loc=0 best 寻找空间最大的最佳位置
  8. # loc的值 除了 可以使用 预定义的0-10 之外 开可以以座标的形式 设置位置
  9. # plt.legend(['A','B','C'],loc=[0,0])
  10. # plt.legend(['A','B','C'],loc=[1,1])
  11. # plt.legend(['A','B','C'],loc=[-0.5,1.5])

ncol参数

ncol控制图例中有几列,在legend中设置ncol,需要设置loc

  1. data = np.random.randint(0,100,size=(10,3))
  2. df = DataFrame(data,columns=list('ABC'))
  3. df
  4. plt.plot(df['A'])
  5. plt.plot(df['B'])
  6. plt.plot(df['C'])
  7. plt.legend(['A','B','C'],ncol=3) # ncol 用来指定有几列

二、设置plot的风格和样式

plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色、线型、点型等要素,语法形式为:
plt.plot(X, Y, 'format', ...)

点和线的样式

颜色

  • 参数color或c
  • 颜色值的方式
    • 合法的HTML颜色名

      • color = 'red'
    • 别名
      • color='r'
    • HTML十六进制字符串
      • color = '#eeefff'
    • 归一化到[0, 1]的RGB元组
      • color = (0.3, 0.3, 0.4)

  1. x = np.linspace(-np.pi,np.pi,100)
  2. y = np.sinh(x)
  3. # plt.plot(x,y,color='red') # color属性 设置线的颜色 后面的值是字符串 可以跟
  4. # plt.plot(x,y,c='red') # 参数名可以简写成c
  5. # plt.plot(x,y,c='b') # 参数值也可以简写 rgb光源的三原色(加光模式) cmy(减光模式)k(黑色) w白色
  6. # plt.plot(x,y,c='#abcdef')
  7. plt.plot(x,y,c=(0.5,0.4,0.1))

透明度

plt.plot() 中的 alpha参数

  1. plt.plot(x,y,c=(0.5,0.4,0.1),alpha=0.2)

线型和线宽

  • 参数linestyle或ls
  • linewidth或lw参数

  1. x = np.linspace(0,10,11)
  2. x
  3. y = x
  4. plt.plot(x,y,c='orange',ls='steps',dashes=[2,4,6,8],alpha=0.8)

点型

  • marker 设置点形
  • markersize 设置点形大小

更多点和线的设置

  • markeredgecolor = 'green',
  • markeredgewidth = 2,
  • markerfacecolor = 'purple'

同时设置多个曲线样式

多个曲线同一设置

plt.plot(x1, y1, x2, y2,...,样式参数)

  1. plt.plot(x,x,x,2*x,x,x/2,color='r',ls=':',marker='.') # x1 y1 x2 y2 x3 y3
  2. # 多对曲线 样式一样 可以 在最后 统一设置

多个曲线不同设置

多个都进行设置时,多参数连用

plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...) fmt format 格式化字符串

fmt = '[color][marker][line]'

plt.plot(x,x,'ro-',x,2*x,'b*:',x,x/2,'yd--') # fmt format 格式化字符串
# fmt = '[color][marker][line]'

文档 https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot

曲线样式的三种设置方式

向方法传入关键字参数

plt.plot(...)

就是之前我们一直用的 调用plt.plot()绘图的时候往里面传参数的方式
优点:简洁方便

缺点:容易乱 没提示 可读性差

对实例使用一系列的setter方法

  • plt.plot()方法返回一个包含所有线的列表,设置每一个线需要获取该线对象

    • eg: lines = plt.plot(); line = lines[0]
    • line.set_linewidth()
    • line.set_linestyle()
    • line.set_color()
  1. lines = plt.plot(x,x,x,2*x,x,x/2)
  2. lines[0].set_linestyle('--')
  3. lines[1].set_linewidth(5)
  4. lines[2].set_color('cyan')

对坐标系使用一系列的setter方法

  • axes = plt.subplot()获取坐标系
  • axes.plot(...)
  1. axes = plt.subplot()
  2. lines = axes.plot(x,x,x,2*x,x,x/2)
  3. lines[0].set_linestyle('--')
  4. lines[1].set_linewidth(5)
  5. lines[2].set_color('cyan')

axes对象文档 https://matplotlib.org/api/axes_api.html

lines对象文档 https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D

X、Y轴坐标刻度

plt.xticks()和plt.yticks()方法

  • 需指定刻度值和刻度名称 plt.xticks([刻度列表],[名称列表])
  • 支持fontsize、rotation、color等参数设置
  1. x = np.linspace(-np.pi,np.pi,100)
  2. x
  3. y = np.sin(x)
  4. plt.plot(x,y)
  5. # plt.xticks([-3,0,3]) # 以列表的形式传入要显示的刻度
  6. # plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],['-$\pi$','-$\pi$/2',0,'$\pi$/2','$\pi$']) # 第二个列表 可以传 要显示的名字
  7. plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],['-$\pi$','-$\pi$/2',0,'$\pi$/2','$\pi$'],fontsize=20,color='r',rotation=45)
  8. plt.yticks([1,0.5,0,-0.5,-1],['max',0.5,0,-0.5,'min'])
  9. plt.grid()

  1. axes = plt.subplot(111)
  2. axes.plot(x,y)
  3. # axes.set_xticks([-3,0,3],['min',0,'max']) # set_xticks只能设置显示哪些刻度 不能设置自定义名称
  4. axes.set_xticks([-3,0,3])
  5. axes.set_xticklabels(['min',0,'max']) # 用这个可以设置 自定义名称

  1. # 保存图片
  2. fig = plt.figure()
  3. x = np.linspace(0,99,100)
  4. x
  5. plt.plot(x)
  6. plt.plot(x.cumsum())
  7. # fname filename 文件名 用来指定要保存在哪里 不指定后缀默认是png图片 还可以是pdf svg
  8. # dpi dot per inch 清晰度
  9. # facecolor图片的背景颜色
  10. fig.savefig('demo.png',dpi=100,facecolor='c') # 保存图像
 

数据分析库之matplotlib的更多相关文章

  1. 数据分析与展示——Matplotlib库入门

    Matplotlib库入门 Matplotlib库介绍 Matliotlib库是Python优秀的数据可视化第三方库. Matliotlib库的效果见:http://matplotlib.org/ga ...

  2. Python数据分析库pandas基本操作

    Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...

  3. 教程 | 一文入门Python数据分析库Pandas

    首先要给那些不熟悉 Pandas 的人简单介绍一下,Pandas 是 Python 生态系统中最流行的数据分析库.它能够完成许多任务,包括: 读/写不同格式的数据 选择数据的子集 跨行/列计算 寻找并 ...

  4. 在量化金融中15个最流行的Python数据分析库

    Python是当今应用最广泛的编程语言之一,以其效率和代码可读性著称.作为一个科学数据的编程语言,Python介于R和java之间,前者主要集中在数据分析和可视化,而后者主要应用于大型应用.这种灵活性 ...

  5. 数据分析与展示——Matplotlib基础绘图函数示例

    Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...

  6. python 数据分析库介绍

    1 引言 高效处理数据的python工具: 与外界进行交互: 读写各种文件格式和数据库 准备: 对数据进行清理.修整.整合.规范化.重塑.切片切换.变形等处理以便进行分析 转换: 对数据集做一些数学和 ...

  7. Python 金融数据分析库及相关框架

    BackTest框架库: PyAlgoTrade ZipLine 金融数据分析库: pandas

  8. python数据分析scipy和matplotlib(三)

    Scipy 在numpy基础上增加了众多的数学.科学及工程常用的库函数: 线性代数.常微分方程求解.信号处理.图像处理.稀疏矩阵等: Matplotlib 用于创建出版质量图表的绘图工具库: 目的是为 ...

  9. 预备知识-python核心用法常用数据分析库(上)

    1.预备知识-python核心用法常用数据分析库(上) 目录 1.预备知识-python核心用法常用数据分析库(上) 概述 实验环境 任务一:环境安装与配置 [实验目标] [实验步骤] 任务二:Pan ...

随机推荐

  1. jQuery 学习笔记(5)(事件绑定与解绑、事件冒泡与事件默认行为、事件的自动触发、自定义事件、事件命名空间、事件委托、移入移出事件)

    1.事件绑定: .eventName(fn) //编码效率略高,但部分事件jQuery没有实现 .on(eventName, fn) //编码效率略低,所有事件均可以添加 注意点:可以同时添加多个相同 ...

  2. spring和springboot

    Spring四大原则: 1.使用POJO进行轻量级和最小侵入式开发 2.通过依赖注入和基于接口编程实现松耦合 3,.通过AOP和默认习惯进行声明式编程 4.使用AOP和模版template减少模式化代 ...

  3. k-means性能测试

    clf = MiniBatchKMeans(n_clusters=5000, batch_size=5000, n_init=1, max_iter=200, max_no_improvement=1 ...

  4. ASP.NET CORE 2.0 Uses SignalR Technology

    https://www.codeproject.com/Articles/1208322/ASP-NET-CORE-Uses-SignalR-Technology

  5. 使用rander() 将后台的数据传递到前台界面显示出来

    1.创建templates文件夹 2.在该文件夹内创建html界面a.html 3.views.py: def a(request): love='iloveyou' return render(re ...

  6. sublime-text3打造markdown编辑器

    编辑插件 sublime自带的markdown语法高亮并不是很友好,推荐安装Markdown Editing,github主页然后在视图->语法里选择MarkdownEditing启用,支持三种 ...

  7. day11 python之函数装饰器

    一,什么是装饰器? 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象. 装饰器的应用场景:比如插入日志,性能测试,事 ...

  8. mysql优化方案之sql优化

    优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先 ...

  9. Oracle表空间碎片整理SHRINK与MOVE

    整理表碎片通常的方法是move表,当然move是不能在线进行的,而且move后相应的索引也会失效,oracle针对上述不足,在10g时加入了shrink,那这个方法能不能在生产中使用呢?        ...

  10. python 装饰器(语法糖)

    def  login(func):    def testlogin():        for  i in range(3):            _username="abc" ...