LogoLogo
  • README
  • 前端编程
    • 01 Node JS
    • 02-ES6详解
    • 03-NPM详解
    • 04-Babel详解
    • 05-前端模块化开发
    • 06-WebPack详解
    • 07-Vue详解
    • 08-Git详解
    • 09-微信小程序
  • 人工智能
    • 机器学习
      • 二次分配问题
      • 非负矩阵
      • 概率潜在语义分析
      • 概率图模型
      • 集成学习
      • 降维
      • 距离度量
      • 决策树
      • 逻辑回归
      • 马尔可夫决策过程
      • 马尔可夫链蒙特卡洛法
      • 朴素贝叶斯法
      • 谱聚类
      • 奇异值分解
      • 潜在狄利克雷分配
      • 潜在语义分析
      • 强化学习
      • 社区算法
      • 时间序列模型
      • 特征工程
      • 条件随机场
      • 图论基础
      • 线性分类
      • 线性回归
      • 信息论中的熵
      • 隐马尔科夫模型
      • 支持向量机
      • 主成分分析
      • EM算法
      • Hermite 矩阵的特征值不等式
      • k-means聚类
      • k近邻法
      • PageRank算法
    • 深度学习
      • Pytorch篇
        • 01-线性模型
        • 02-梯度下降法
        • 03-反向传播
        • 04-pytorch入门
        • 05-用pytorch实现线性回归
        • 06-logistic回归
        • 07-处理多维特征的输入
        • 08-加载数据集
        • 09-多分类问题
        • 10-卷积神经网络
        • 11-循环神经网络
    • 图神经网络
      • 图神经网络笔记01
        • 01-图(Graphs)的结构
        • 02-网络的性质和随机图模型
        • 03-网络工具
        • 04-网络中的主题和结构角色
        • 05-网络中的社区结构
      • 图神经网络笔记02
        • 01-深度学习引言
        • 02-神经网络基础
        • 03-卷积神经网络
        • 04-图信号处理与图卷积神经网络
        • 05-GNN的变体与框架-
        • [06-Google PPRGo 两分钟分类千万节点的最快GNN](人工智能/图神经网络/图神经网络笔记02/06-Google%20PPRGo 两分钟分类千万节点的最快GNN.md)
        • 07-序列模型
        • 08-变分自编码器
        • 09-对抗生成网络
  • 日常记录
    • 健身日记
    • 面经记录
    • 自动生成Summary文件
  • 实战项目
    • 谷粒商城
      • 00-项目概述
      • 01-分布式基础-全栈开发篇
      • 02-分布式高级-微服务架构篇
      • 03-高可用集群-架构师提升篇
  • 数据库
    • MySQL笔记
      • 01-MySQL基础篇
      • 02-MySQL架构篇
      • 03-MySQL索引及调优篇
      • 04-MySQL事务篇
      • 05-MySQL日志与备份篇
    • Redis笔记
      • 01-Redis基础篇
      • 02-Redis高级篇
    • 02-Redis篇
  • 算法笔记
    • 01-算法基础篇
    • 02-算法刷题篇
  • 职能扩展
    • 产品运营篇
  • Go编程
    • 01-Go基础
      • 01-Go基础篇
  • Java编程
    • 01-Java基础
      • 01-Java基础篇
      • 02-多线程篇
      • 03-注射与反解篇
      • 04-JUC并发编程篇
      • 05-JUC并发编程与源码分析
      • 06-JVM原理篇
      • 07-Netty原理篇
      • 08-设计模式篇
    • 02 Java Web
      • 01-Mybatis篇
      • 01-Mybatis篇(新版)
      • 02-Spring篇
      • 02-Spring篇(新版)
      • 03-SpringMVC篇
      • 04-MybatisPlus篇
    • 03-Java微服务
      • 01-SpringBoot篇
      • 01-SpringBoot篇(新版)
      • 02-SpringSecurity篇
      • 03-Shiro篇
      • 04-Swagger篇
      • 05-Zookeeper篇
      • 06-Dubbo篇
      • 07-SpringCloud篇
      • 08-SpringAlibaba篇
      • 09-SpringCloud篇(新版)
    • 04-Java中间件
      • 数据库篇
        • 01-分库分表概述
        • 02-MyCat篇
        • 03-MyCat2篇
        • 04-Sharding-jdbc篇
        • 05-ElasticSearch篇
      • 消息中间件篇
        • 01-MQ概述
        • 02-RabbitMQ篇
        • 03-Kafka篇
        • 04-RocketMQ篇
        • 05-Pulsar篇
    • 05-扩展篇
      • Dubbo篇
      • SpringBoot篇
      • SpringCloud篇
    • 06-第三方技术
      • 01-CDN技术篇
      • 02-POI技术篇
      • 03-第三方支付技术篇
      • 04-第三方登录技术篇
      • 05-第三方短信接入篇
      • 06-视频点播技术篇
      • 07-视频直播技术篇
    • 07-云原生
      • 01-Docker篇
      • 02-Kubernetes篇
      • 03-Kubesphere篇
  • Linux运维
    • 01-Linux篇
    • 02-Nginx篇
  • Python编程
    • 01-Python基础
      • 01.配置环境
      • 02.流程控制
      • 03.数值
      • 04.操作符
      • 05.列表
      • 06.元祖
      • 07.集合
      • 08.字典
      • 09.复制
      • 10.字符串
      • 11.函数
      • 12.常见内置函数
      • 13.变量
      • 14.异常和语法错误
      • 15.时间和日期
      • 16.正则表达式
    • 02 Python Web
      • flask篇
        • 01.前言
        • 02.路由
        • 03.模板
        • 04.视图进阶
        • 05.flask-sqlalchemy
        • 06.表单WTForms
        • 07.session与cookie
        • 08.上下文
        • 09.钩子函数
        • 10.flask 信号
        • 11.RESTFUL
        • 13.flask-mail
        • 14.flask+celery
        • 15.部署
        • 16.flask-login
        • 17.flask-cache
        • 18.flask-babel
        • 19.flask-dashed
        • 20.flask-pjax
        • 21.flask上传文件到第三方
        • 22.flask-restless
        • 23.flask-redis
        • 24.flask-flash
        • 25.消息通知
        • 26.分页
    • 03-Python数据分析
      • Matplotlib
      • Numpy
      • Pandas
      • Seaborn
    • 04-Python爬虫
      • 1.准备工作
      • 2.请求模块的使用
      • 3.解析模块的使用
      • 4.数据存储
      • 5.识别验证码
      • 6.爬取APP
      • 7.爬虫框架
      • 8.分布式爬虫
由 GitBook 提供支持
在本页
  • 什么是matplolib?
  • 如何在matplotlib中显示中文
  • 相关组件
  • 什么是Figure和Axes
  • 演示
  • 多子图
  • 第一种方式
  • 第二种方式
  • 第三种方式
  • 线形图
  • 传数据的两种方式
  • 绘制多条线
  • 其他设置
  • 坐标轴刻度
  • 设置坐标轴上下限
  • 自定义刻度
  • 标题、轴标签以及图例
  • 演示
  • 设置标题--title
  • 设置图例
  • 文本、箭头和注释
  • 演示
  • 设置标题--title
  • 设置图例
  • 文本
  • 箭头和注释
  • 条形图
  • 直方图
  • 饼图
  • 散点图
  • 箱线图

这有帮助吗?

在GitHub上编辑
  1. Python编程
  2. 03-Python数据分析

Matplotlib

上一页03-Python数据分析下一页Numpy

最后更新于3年前

这有帮助吗?

什么是matplolib?

Matplotlib是一个Python 2D绘图库,可以生成各种硬拷贝格式和跨平台交互式环境的出版物质量数据。Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。

Matplotlib能够很方便的生成绘图,比如直方图,功率谱,条形图,误差图,散点图等。

如何在matplotlib中显示中文

from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

相关组件

img

什么是Figure和Axes

Figure:整个画布对象。我们所有的绘图操作都是在Figure对象上操作的,不论是单个图表还是多子图

Axes:就是常说的具体的“一幅图”(),它是具有数据空间的图像区域

演示

In[1]:

import numpy as np
import matplotlib.pyplot as plt
import math
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

# 创建数据集
x = np.linspace(0,3,100)

# 绘制三条线
plt.plot(x,x,label='线性')
plt.plot(x,x**2,label='平方')
plt.plot(x,x**3,label='立方')

# 设置x轴和y轴名称
plt.xlabel('x轴')
plt.ylabel('y轴')

# 设置标题名称
plt.title('简单绘图')

# 显示legend
plt.legend()
plt.show()

Out[1]:

多子图

In[1]:

import numpy as np
import matplotlib.pyplot as plt

第一种方式

In [2]:

fig = plt.figure(figsize=(12,4)) # figsize 用来设置图的大小
ax1 = fig.add_subplot(1,3,1) # 添加子图,参数含义为位置(x,y)以及第几张图
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)

ax1.plot([1,2,3])
ax2.plot([3,2,1])
ax3.plot([2,2,2])

plt.show()

In [3]:

fig = plt.figure(figsize=(12,4)) # figsize 用来设置图的大小
ax1 = fig.add_subplot(1,3,2)     # 添加子图,参数含义为位置(x,y)
                                 # 以及第几张图即图的位置以及顺序
ax2 = fig.add_subplot(1,3,3)
ax3 = fig.add_subplot(1,3,1)

ax1.plot([1,2,3])
ax2.plot([3,2,1])
ax3.plot([2,2,2])

plt.show()

第二种方式

In [4]:

fig2,axes= plt.subplots(1,3,figsize=(12,4))

axes[0].plot([1,2,3]) # 通过axes数组直接进行分部图形位置
axes[1].plot([3,2,1])
axes[2].plot([2,2,2])

plt.show()
  • 如果axes是多维对象,则需要传入多个坐标

In [5]:

fig3,axes = plt.subplots(2,3,figsize=(12,4)) # 创建一个2x3的图布

axes[0,0].plot([1,2,3]) # 传入数值,进行绘画
axes[0,1].plot([3,2,1])
axes[0,2].plot([2,2,2])

plt.show()

第三种方式

由于不推荐,就不进行学习了

线形图

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, kwargs)

传数据的两种方式

In[1]:

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, kwargs)

In [2]:

import matplotlib.pyplot as plt
fig,axes = plt.subplots()

axes.plot([1,2,3,4])

plt.show()

In [3]:

figure,axes = plt.subplots()

data = {
    'a':[1,2,3],
    'b':[3,2,1]
}

axes.plot('a','b',data=data)

plt.show()

绘制多条线

In [4]:

figure,axes = plt.subplots()

data = {
    'a':[1,2,3],
    'b':[3,2,1]
}

axes.plot('a','b',data=data)
axes.plot([1,2,3,4])

plt.show()

其他设置

1.颜色设置--color

可选值: 'b' blue 'g' green 'r' red 'c' cyan 'm' magenta 'y' yellow 'k' black 'w' white

In [5]:

figure,axes = plt.subplots()

axes.plot([1,2,3,4,5,6],color='r',drawstyle='steps')

plt.show()

2.线性设置--linestyle

可选值:['solid' | 'dashed', 'dashdot', 'dotted' | (offset, on-off-dash-seq) | '-' | '--' | '-.' | ':' | 'None' | ' ' | '']

In [6]:

figure,axes = plt.subplots()

axes.plot([1,2,3,4,5,6],linestyle='-.')

plt.show()

3.drawstyle

可选值:['default' | 'steps' | 'steps-pre' | 'steps-mid' | 'steps-post']

In [7]:

figure,axes = plt.subplots()

axes.plot([1,2,3,4],color='r',drawstyle='steps')

plt.show()

4.标记--marker

可选值:'.' point marker 
        ',' pixel marker 
        'o' circle marker 
        'v' triangle_down marker
        '^' triangle_up marker
        '<' triangle_left marker 
        '>' triangle_right marker 
        '1' tri_down marker
        '2' tri_up marker 
        '3' tri_left marker 
        '4' tri_right marker
        's' square marker 
        'p' pentagon marker 
        '*' star marker
        'h' hexagon1 marker 
        'H' hexagon2 marker 
        '+' plus marker 
        'x' x marker 
        'D' diamond marker 
        'd' thindiamond marker 
        '|' vline marker 
        ``''`` hline marker

In [8]:

figure,axes = plt.subplots()

axes.plot([1,2,3,4,5,6],marker='o')

plt.show()

坐标轴刻度

In [1]:

import numpy as np
import matplotlib.pyplot as plt

设置坐标轴上下限

In [2]:

x = np.linspace(0,15,100)

plt.plot(x,np.sin(x))
plt.xlim(0,12) # x轴刻度
plt.ylim(-2,2) # y轴刻度

plt.show()
  • 坐标轴设置为倒序

In [3]:

x = np.linspace(0,10,100)

plt.plot(x,np.sin(x))
plt.xlim(12,0)
plt.ylim(2,-2)

plt.show()

自定义刻度

In [4]:

plt.plot(np.linspace(-40,1,800))

# 设置x轴与y轴的刻度,rotation为旋转的度数,fontsize为字体的大小

plt.xticks([0,200,400,600,800],rotation=30 ,fontsize='large')
plt.yticks([-40,-30,-20,-10,0],rotation=30,fontsize='small')

Out[4]:

([<matplotlib.axis.YTick at 0x2997d645508>,
  <matplotlib.axis.YTick at 0x2997d644b88>,
  <matplotlib.axis.YTick at 0x2997d63f8c8>,
  <matplotlib.axis.YTick at 0x2997d66b988>,
  <matplotlib.axis.YTick at 0x2997d667308>],
 <a list of 5 Text yticklabel objects>)

标题、轴标签以及图例

演示

In [1]:

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

In [2]:

x = np.linspace(0,2,100)

plt.plot(x,np.sin(x),'-.g',label='sin(x)')
plt.plot(x,np.cos(x),':r',label='cos(x)')

plt.title("演示标题")
plt.xlabel('x轴')
plt.ylabel('sin or cos')

plt.legend()

Out[2]:

<matplotlib.legend.Legend at 0x1c2b8dc1dc8>

设置标题--title

fontsize:字体大小,默认12,也可以使用xx-small....字符串系列

fontweight:字体粗细,或者'light'、'normal'、'medium'、'semibold'、'bold'、'heavy'、'black'。

fontstyle: 字体类型,或者'normal'、'italic'、'oblique'。

verticalalignment:垂直对齐方式 ,或者'center'、'top'、'bottom'、'baseline'

horizontalalignment:水平对齐方式,可选参数:‘left’、‘right’、‘center’

rotation:旋转角度

alpha: 透明度,参数值0至1之间

backgroundcolor: 背景颜色

bbox:给标题增加外框 ,常用参数如下:

boxstyle:方框外形

facecolor:(简写fc)背景颜色

edgecolor:(简写ec)边框线条颜色

edgewidth:边框线条大小

In [3]:

x = np.linspace(0,2,100)

plt.plot(x,np.sin(x),'-.r',label='sin(x)')

plt.title('演示标题',fontsize=16,fontweight='heavy')

plt.xlabel('x')
plt.ylabel('y')

plt.legend()

Out[3]:

<matplotlib.legend.Legend at 0x1c2b8e8ea48>

设置图例

loc:图例的位置,参数值分别为1,2,3,4代表四个方向
prop:字体参数
fontsize:字体大小
markerscale:图例标记与原始标记的相对大小
markerfirst:如果为True,则图例标记位于图例标签的左侧
numpoints:为线条图图例条目创建的标记点数
scatterpoints:为散点图图例条目创建的标记点数
scatteryoffsets:为散点图图例条目创建的标记的垂直偏移量
frameon:是否显示图例边框
fancybox:边框四个角是否有弧度
shadow:控制是否在图例后面画一个阴影
framealpha:图例边框的透明度
edgecolor:边框颜色
facecolor:背景色
ncol:设置图例分为n列展示
borderpad:图例边框的内边距
labelspacing:图例条目之间的垂直间距
handlelength:图例句柄的长度
handleheight:图例句柄的高度
handletextpad:图例句柄和文本之间的间距
borderaxespad:轴与图例边框之间的距离
columnspacing:列间距
title:图例的标题

In [4]:

lines = []
styles = ['-','-.','--',':']
x = np.linspace(0,1,100)

for i in range(4):
    lines += plt.plot(x,np.sin(x+np.pi*x),styles[i])
plt.axis('equal')

# 生成第一个图例
leg = plt.legend(lines[:2],['A','B'],loc=1,frameon=False)

# 生成第二个图例,但是第一个图例会被抹去
plt.legend(lines[2:],['C','D'],loc=4,frameon=False)

# gca方法获取当前坐标轴,再使用它的`add_artist`方法将第一个图例重新画上去
plt.gca().add_artist(leg)

Out[4]:

<matplotlib.legend.Legend at 0x1c2b8e8ee08>

文本、箭头和注释

演示

In [1]:

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

In [2]:

x = np.linspace(0,2,100)

plt.plot(x,np.sin(x),'-.g',label='sin(x)')
plt.plot(x,np.cos(x),':r',label='cos(x)')

plt.title("演示标题")
plt.xlabel('x轴')
plt.ylabel('sin or cos')

plt.legend()

Out[2]:

<matplotlib.legend.Legend at 0x21b4eff5208>

设置标题--title

fontsize:字体大小,默认12,也可以使用xx-small....字符串系列

fontweight:字体粗细,或者'light'、'normal'、'medium'、'semibold'、'bold'、'heavy'、'black'。

fontstyle: 字体类型,或者'normal'、'italic'、'oblique'。

verticalalignment:垂直对齐方式 ,或者'center'、'top'、'bottom'、'baseline'

horizontalalignment:水平对齐方式,可选参数:‘left’、‘right’、‘center’

rotation:旋转角度

alpha: 透明度,参数值0至1之间

backgroundcolor: 背景颜色

bbox:给标题增加外框 ,常用参数如下:

boxstyle:方框外形

facecolor:(简写fc)背景颜色

edgecolor:(简写ec)边框线条颜色

edgewidth:边框线条大小

In [3]:

x = np.linspace(0,2,100)

plt.plot(x,np.sin(x),'-.r',label='sin(x)')

plt.title('演示标题',fontsize=16,fontweight='heavy')

plt.xlabel('x')
plt.ylabel('y')

plt.legend()

Out[3]:

<matplotlib.legend.Legend at 0x21b4f7b0908>

设置图例

loc:图例的位置,参数值分别为1,2,3,4代表四个方向
prop:字体参数
fontsize:字体大小
markerscale:图例标记与原始标记的相对大小
markerfirst:如果为True,则图例标记位于图例标签的左侧
numpoints:为线条图图例条目创建的标记点数
scatterpoints:为散点图图例条目创建的标记点数
scatteryoffsets:为散点图图例条目创建的标记的垂直偏移量
frameon:是否显示图例边框
fancybox:边框四个角是否有弧度
shadow:控制是否在图例后面画一个阴影
framealpha:图例边框的透明度
edgecolor:边框颜色
facecolor:背景色
ncol:设置图例分为n列展示
borderpad:图例边框的内边距
labelspacing:图例条目之间的垂直间距
handlelength:图例句柄的长度
handleheight:图例句柄的高度
handletextpad:图例句柄和文本之间的间距
borderaxespad:轴与图例边框之间的距离
columnspacing:列间距
title:图例的标题

In [4]:

lines = []
styles = ['-','-.','--',':']
x = np.linspace(0,1,100)

for i in range(4):
    lines += plt.plot(x,np.sin(x+np.pi*x),styles[i])
plt.axis('equal')

# 生成第一个图例
leg = plt.legend(lines[:2],['A','B'],loc=1,frameon=False)

# 生成第二个图例,但是第一个图例会被抹去
plt.legend(lines[2:],['C','D'],loc=4,frameon=False)

# gca方法获取当前坐标轴,再使用它的`add_artist`方法将第一个图例重新画上去
plt.gca().add_artist(leg)

Out[4]:

<matplotlib.legend.Legend at 0x21b4f850f88>

文本

class matplotlib.text.Annotation(text, xy, xytext=None, xycoords='data', textcoords=None, arrowprops=None, annotation_clip=None, kwargs)

In [5]:

x = np.linspace(0,20,100)
plt.plot(x,np.sin(x))
# 11和0.6表示文本出现的(x,y)位置,ha以及va分别为水平和垂直方向
plt.text(11,0.6,'the sin(x)',ha='center',va='center')

Out[5]:

Text(11, 0.6, 'the sin(x)')

箭头和注释

matplotlib.pyplot.annotate(s, xy, *args, kwargs)

主要参数:
        s:注释文本内容
        xy:被注释对象的坐标位置,实际上就是图中箭头的箭锋位置
        xytext: 具体注释文字的坐标位置
        xycoords:被注释对象使用的参考坐标系
        extcoords:注释文字的偏移量
        arrowprops:可选,增加注释箭头
        width:箭头宽度,以点为单位
        frac:箭头头部所占据的比例
        headwidth:箭头底部的宽度,以点为单位
        shrink:移动提示,并使其离注释点和文本一些距离

In [6]:

figure,axes = plt.subplots()

x = np.linspace(0,20,1000)
axes.plot(x,np.cos(x),'-.r')
axes.axis('equal')

# facecolor参数修改箭头颜色,shrink参数越小箭头长度越长

axes.annotate('极大值',xy=(6.28,1.2),xytext=(10,5),
             arrowprops=dict(facecolor='blue',shrink=0.05))

# arrowstyle指定箭头形状
axes.annotate('极小值',xy=(5*np.pi,-1),xytext=(10,-6),
             arrowprops=dict(arrowstyle='->',connectionstyle='angle3,angleA=0,angleB=-90'))

Out[6]:

Text(10, -6, '极小值')

条形图

In [1]:

import numpy as np
from matplotlib import pyplot as plt
from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, kwargs)


主要参数说明:

    x:x坐标。int,float
    height:条形的高度。int,float
    width:宽度。0~1,默认0.8
    botton:条形的起始位置,也是y轴的起始坐标
    align:条形的中心位置。“center”,"lege"边缘
    color:条形的颜色。“r","b","g","#123465",默认“b"
    edgecolor:边框的颜色。同上
    linewidth:边框的宽度。像素,默认无,int
    tick_label:下标的标签。可以是元组类型的字符组合
    log:y轴使用科学计算法表示。bool
    orientation:是竖直条还是水平条。竖直:"vertical",水平条:"horizontal"

In [2]:

y = range(0,16)
x = np.arange(16)

plt.bar(x,y)
plt.show()

In [3]:

y = range(0,17)
x = np.arange(17)

plt.bar(x,y,alpha=0.5,width=0.3,color='red',edgecolor='black',label='条形图1',lw=3)
plt.bar(x+0.4,y,alpha=0.2,width=0.3,color='blue',edgecolor='yellow',label='条形图2',lw=3)
plt.show()

In [4]:

M = 7

age1 = [20,25,36,25,28,30,10]
age2 = [21,22,38,26,21,35,18]

age1_std = [5,3,4,2,3,1,2]
age2_std = [2,3,6,4,5,2,2]

x = np.arange(M)

width = 0.35

p1 = plt.bar(x, age1, width, yerr=age1_std)
p2 = plt.bar(x, age2, width,bottom=age1, yerr=age2_std) # p2条形图位于p1条形图的上方

plt.ylabel('年龄')
plt.title('男女年龄')
plt.xticks(x,['a1','a2','a3','a4','a5','a6','a7'])
plt.yticks(np.arange(0,100,10))

plt.legend((p1[0],p2[0]),('男生年龄','女生年龄'))
plt.show()

直方图

matplotlib.pyplot.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, kwargs)

主要参数:

    x:数据集,最终的直方图将对数据集进行统计
    bins:统计的区间分布
    range:tuple, 显示的区间,测试发现添加range并没有达到想要的效果,即显示指定区间统计结果,如果有小伙伴知道,欢迎评论,谢谢
    density:bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
    histtype:可选{'bar', 'barstacked', 'step', 'stepfilled'}之一,默认为bar,推荐使用默认配置,step使用的是梯状,stepfilled则会对梯状内部进行填充,效果与bar类似
    align:可选{'left', 'mid', 'right'}之一,默认为'mid',控制柱状图的水平分布,left或者right,会有部分空白区域,推荐使用默认
    log:bool,默认False,即y坐标轴是否选择指数刻度
    stacked:bool,默认为False,是否为堆积状图

In [5]:

mu = 3
sigma = 0.1
number = 1000
x = np.random.normal(mu,sigma,number)*10+50

plt.hist(x,50)
plt.show()

In [6]:

mu, sigma = 60,10
x = mu + sigma * np.random.randn(10000)

plt.hist(x, 50, density=True, facecolor='g', alpha=0.75)

plt.xlabel('数量')
plt.ylabel('频率')
plt.title('直方图')
plt.text(30, .035, r'$\mu={} ,\sigma={}$'.format(mu,sigma))

# 修改x,y刻度范围
plt.ylim(0,0.05)
plt.xlim(20,100)

plt.grid(True)
plt.show()

饼图

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, data=None)

主要参数:

    x :(每一块)的比例,如果sum(x) > 1会使用sum(x)归一化;
    labels:(每一块)饼图外侧显示的说明文字;
    explode:(每一块)离开中心距离;
    startangle:起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起;
    shadow:在饼图下面画一个阴影。默认值:False,即不画阴影;
    labeldistance:label标记的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧;
    autopct:控制饼图内百分比设置,可以使用format字符串或者format function,'%1.1f'指小数点前后位数(没有用空格补齐);
    pctdistance:类似于labeldistance,指定autopct的位置刻度,默认值为0.6;
    radius:控制饼图半径,默认值为1;
    counterclock:指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。
    wedgeprops :字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={'linewidth':3}设置wedge线宽为3。
    textprops:设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。
    center:浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。
    frame:布尔类型,可选参数,默认值:False。如果是true,绘制带有表的轴框架。
    rotatelabels:布尔类型,可选参数,默认为:False。如果为True,旋转每个label到指定的角度。

In [7]:

x = [10,20,30,40,50]

plt.pie(x)
plt.show()

In [8]:

# 图表,将按照逆时针顺序排序

labels = ['A','B','C','D','E']
x = [15,20,37,20,26]
explode = [0,0.1,0,0,0] # 饼图中B区域会脱离与其他区域

figure,axes = plt.subplots()
# shadow:阴影
# statangle;起始绘制角度
# explode:(每一块)离开中心距离
# autopct:区域所占百分比
axes.pie(x,explode=explode,labels=labels,autopct='%1.1f%%',shadow=True,startangle=90)
# 长宽比相等可确保将饼图绘制为圆形
axes.axis('equal')

plt.show()

散点图

主要参数说明:

    x,y:输入数据
    s:标记大小,以像素为单位
    color:颜色
    marker:标记
    alpha:透明度
    linewidths:线宽
    edgecolors :边界颜色

In [9]:

x = np.random.randint(0,15,15)
y = np.random.randint(0,15,15)
plt.scatter(x,y)

Out[9]:

<matplotlib.collections.PathCollection at 0x1937af97948>

In [10]:

number = 100

r0 = 0.6
x = np.random.rand(number)
y = np.random.rand(number)
area = (20*np.random.rand(number))**2
c = np.sqrt(area)
r = np.sqrt(x**2+y**2)
# 满足条件时mask返回True,否则返回False,即被masked的区间为True
area1 = np.ma.masked_where(r < r0,area)
area2 = np.ma.masked_where(r >= r0,area)

plt.scatter(x,y,s=area1,marker='^',c=c)
plt.scatter(x,y,s=area2,marker='o',c=c)

plt.show()

箱线图

matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, *, data=None)

主要参数:

    x:指定要绘制箱线图的数据
    notch:是否是凹口的形式展现箱线图,默认非凹口
    sym:指定异常点的形状,默认为+号显示
    vert:是否需要将箱线图垂直摆放,默认垂直摆放
    whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差
    positions:指定箱线图的位置,默认为[0,1,2…]
    widths:指定箱线图的宽度,默认为0.5
    patch_artist:是否填充箱体的颜色
    meanline:是否用线的形式表示均值,默认用点来表示
    showmeans:是否显示均值,默认不显示
    showcaps:是否显示箱线图顶端和末端的两条线,默认显示
    showbox:是否显示箱线图的箱体,默认显示
    showfliers:是否显示异常值,默认显示
    boxprops:设置箱体的属性,如边框色,填充色等
    labels:为箱线图添加标签,类似于图例的作用
    filerprops:设置异常值的属性,如异常点的形状、大小、填充色等
    medianprops:设置中位数的属性,如线的类型、粗细等
    meanprops:设置均值的属性,如点的大小、颜色等
    capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等
    whiskerprops:设置须的属性,如颜色、粗细、线的类型等

In [11]:

x = np.random.rand(1000)

plt.boxplot(x)
plt.show()

In [12]:

# 创建3个正态分布的一维数组
data = [np.random.normal(0,std,100) for std in range(1,4)]
labels = ['x1','x2','x3']

fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(9,4))

# 矩形箱图

"""
vert:是否垂直
patch_artist:是否填充箱体的颜色
"""
boxplot1 = ax[0].boxplot(data,vert=True,patch_artist=True,labels=labels)
ax[0].set_title('矩形箱图')

# 缺口形状箱形图
"""
notch:是否是凹口的形式展现箱线图,默认非凹口
"""
boxplot2 = ax[1].boxplot(data,notch=True,vert=True,patch_artist=True,labels=labels)
ax[1].set_title('缺口形状箱形图')

# 填充颜色
colors = ['red','pink','lightgreen']
for bp in (boxplot1,boxplot2):
    for patch,color in zip(bp['boxes'],colors):
        patch.set_facecolor(color)

# 添加水平网格线
for a in ax:
    a.yaxis.grid(True)
    a.set_xlabel('三个样本')
    a.set_ylabel('样本值')
    
plt.show()

箱形图最大的优点就是不受异常值的影响,能够准确稳定地描绘出数据的离散分布情况,同时也利于数据的清洗

img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img