【Data Mining】机器学习三剑客之Matplotlib常用算法总结上

Data mining 同时被 2 个专栏收录
7 篇文章 0 订阅

一、前言

数据处理看我的另外两个博文
机器学习三剑客之Numpy常用算法总结
机器学习三剑客之Pandas常用算法总结上
机器学习三剑客之Pandas常用算法总结下

二、下载、安装、导入

安装matplotlib与numpy和pandas相似,一般来说安装就是pip命令。

pip install matplotlib #py2
pip3 install matplotlib #py3

用法则是
一般来说matplotlib我们通常只用pyplot这个板块。

import matplotlib.pyplot as plt

一般来说用法为三部曲: 数据预备+各种函数显示+plt.show()

以下是每个用法的讲解

plot

这个函数和matlab中的极为相似

通过函数映射显示

import matplotlib.pyplot as plt
import numpy as np
# 利用 numpy产生一个-5到5的100个等分点
# 利用 numpy产生一个-5到5的100个等分点
# 一般等分的越多则最终画出的图形就光滑
# 因为这里y其实是通过一个映射函数得到的一个y集合
# 等分越多说明点越多的去表示,则越光滑,反正则有很多棱角
x = np.linspace(-5, 5, 100)
y = x**3
# plot显示
plt.plot(x, y)
# 一定要有这句话,否则不显示
plt.show()

结果为:在这里插入图片描述

直接离散坐标点输入显示

其实和上述是一回事,这里显示的就是折线图

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.show()

在这里插入图片描述

figure

import matplotlib.pyplot as plt
import numpy as np

x1 = np.linspace(-5, 5, 100)

y1 = x1*3 - 2
y2 = x1**3

plt.figure() #这句话下面都是针对这个窗口的
plt.plot(x1, y1)

plt.figure()
plt.plot(x1, y2)

plt.show()

在这里插入图片描述
在这里插入图片描述
默认为1-2-3-4,也可以设参数来设置成自己想要的次数
在这里插入图片描述
这里我们常用的是num来定义不同的figure number,用figuresize来定义固定的figure的大小。

import matplotlib.pyplot as plt
import numpy as np

x1 = np.linspace(-5, 5, 100)

y1 = x1*3 - 2
y2 = x1**3
# num define Figure number
plt.figure(num=2, facecolor='b') #这句话下面都是针对这个窗口的
plt.plot(x1, y1)
# figsize define size of this figure
plt.figure(num=22, figsize=[5, 2]) #可以看出明显图片变摘了
plt.plot(x1, y2)

# 在一个figure中显示多条线段
plt.figure(num=111)
plt.plot(x1, y1)
plt.plot(x1, y2)
# 同上和上述最终效果一致
plt.figure(num=112)
plt.plot(x1, y1, x1, y2)
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 这里可以看出重新固定figsize只是整个图片在水平或者垂直方向压缩或扩展,而不是整个图片的截取,只是对应的尺寸进行压缩或扩展
  • 每使用一次plt.figure()就相当于创建一个画板,再出现下一个plt.figure()之前这段代码相当于都是在这个画板上添加的零部件,以后会讲到坐标,标签,注释等等。
  • 在一个坐标上同时显示多个线段,有两种方式,直接使用plot,或者在同一个figure上定义即可

详解plot

主要是调用以下函数
在这里插入图片描述

scalex,scaley参数

两个参数默认为True,意思为整个图像的显示根据x和y的范围值进行显示
若scalex=FaLse则x轴只显示0-1,scaley=False则轴只显示0-1

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 100)
y = x**2
# plot显示
plt.figure()
plt.plot(x, y)
plt.figure()
plt.plot(x, y, scalex=False)
plt.figure()
plt.plot(x, y, scaley=False)
plt.show()

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

常用显示形式

在这里插入图片描述
fmt 为 format,也就是此时这个线条和标记的格式:宽度,颜色,形状等等

只有一个输入(y输入)

import matplotlib.pyplot as plt
import numpy as np

y = np.linspace(-5, 5, 100)
# plot显示
plt.figure()
plt.plot(y) #只有一个输入 则为y输入,x自适应显示坐标范围
plt.show()

在这里插入图片描述

多个输入

format输入为string或者字典格式,**kwargs:第二组或更多,(x,y,format_string)
fomat可选如下
colors
在这里插入图片描述
Line Styles
来自于菜鸟教程

Markers
来自于菜鸟教程来自于菜鸟教程

# 单独使用标记或样式
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.5)
"""
黄色的点划线
红色的实心圈标记
绿色的星形标记
"""
plt.plot(x, x*30+10, 'y-.', x, x**2, 'ro', x, x**3, 'g*')

plt.show()

在这里插入图片描述

#混合一起使用
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 10, 0.5)
"""
黄色的点划线
红色的实心圈标记
绿色的星形标记
"""
plt.plot(x, x*30+10, 'y-.s', x, x**2, 'r-o', x, x**3, 'g:*')

plt.show()

在这里插入图片描述

其他参数

  • color:线条颜色,color=’green’
  • linestyle:线条风格,linestyle=’–’
  • marker:标记风格,marker = ‘o’
  • markerfacecolor:标记本身的颜色,markerfacecolor = ‘blue’
  • markersize:标记尺寸,markersize = ‘20’
  • linewidth 线的宽度 linewidth = 10
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 5, 0.2)
y = x**2+1
plt.figure(1)
plt.plot(x, y)
plt.figure(11)
plt.plot(x, y, 'rp--', linewidth=3, markersize=12, markerfacecolor='yellow')
plt.figure(111)
plt.plot(x, y, color='red', marker='p', linestyle='--', linewidth=3, markersize=12, markerfacecolor='yellow')
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • format_string里面的linestyle,marker,color的string的顺序是随意的。
  • 可以看出figure11和figure111是一样的,所以format用string输入设置和字典每个设置效果是相同的。
  • plot只有一个输入则为y,x对应y做自适应坐标,显示最佳
  • 显示多个则输入多个(x,y,format)即可

xylabel 和title

xlabel 和 ylabel为x和y轴的label,title为这个figure的title

# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2, 2, 50)
y1 = -5*x + 5
y2 = x**3
plt.figure(num=222)

plt.plot(x, y2)
plt.plot(x, y1, "y--", linewidth=1.0)

# 添加 标题和x,y轴的label
plt.title('good figure')
plt.xlabel('x_axis')
plt.ylabel('y_axis')


plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2, 2, 50)
y1 = -5*x + 3
y2 = x**3
plt.figure(num=222)

plt.plot(x, y2)
plt.plot(x, y1, "y--", linewidth=2.0)
# 更好看的字体,空格需要加转义字符\
plt.title(r'$label\ title$')
plt.xlabel(r'$xlabel$')
plt.ylabel(r'$ylabel$')
plt.show()

在这里插入图片描述

tick和lim

lim为limit,设定x或y轴的范围尺度,tick为标尺,即自定义化坐标轴

# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2, 2, 50)
y1 = -5*x + 3
y2 = x**3
plt.figure(num=222)

plt.plot(x, y2)
plt.plot(x, y1, "y--", linewidth=2.0)

plt.title('tick and lim')
plt.xlabel('x_label')
plt.ylabel('y_label')

plt.show()

这里图片显示自己框出来方便大家在下面设定之后进行对比
在这里插入图片描述

# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2, 2, 50)
y1 = -5*x + 3
y2 = x**3
plt.figure(num=222)

plt.plot(x, y2)
plt.plot(x, y1, "y--", linewidth=2.0)

plt.title('use limit')
plt.xlabel('x_label')
plt.ylabel('y_label')

plt.xlim((-1.5, 1.5))
plt.ylim((-2, 2))

plt.show()

在这里插入图片描述

# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-2, 2, 50)
y1 = -5*x + 3
y2 = x**3
plt.figure(num=222)

plt.plot(x, y2)
plt.plot(x, y1, "y--", linewidth=2.0)

plt.title('use limit')
plt.xlabel('x_label')
plt.ylabel('y_label')
# use limit
plt.xlim((-1.5, 1.5))
plt.ylim((-2, 2))
# use tick
# -1.5 -0.75 0 0.75 1.5
# input : list or array
new_ticks = np.linspace(-1.5, 1.5, 5)
plt.xticks(new_ticks)
# 把对应的tick换成string
plt.yticks([-2, -1.2, -0.2, 1.11, 2],
           ['codes', 'design', 'to', 'like', 'I'])

plt.show()

在这里插入图片描述

移动坐标轴

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 100)
y = x*2+1
plt.plot(x, y, color='red', linestyle='--', linewidth=3, markersize=12)

plt.show()

在这里插入图片描述
一般来讲我们平时画的坐标轴都是以(0,0)为原点画的x轴,y轴,例如下图形式
在这里插入图片描述
接下来我们通过编写代码的方式进行设置,主要是利用四边的axis,也就是整个figure里面的边框

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 100)
y = x*2+1
plt.plot(x, y, color='red', linestyle='--', linewidth=3, markersize=12)

# gca is get current axis
ax = plt.gca()

# spine为一个边框线线
# 上边框和有边框为无色
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# axis的x坐标系的ticks取得bottom的边框的ticks
# axis的y坐标系的ticks取得bottom的边框的ticks
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

# data 0 就是这个坐标系为0那一点
# 以下两句在于bottom和left两个边框线移到(0,0)那点
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

plt.show()

在这里插入图片描述

  • 3
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值