Matplotlib

0

Matplotlib介绍

  Matplotlib是python绘图领域使用最广泛的库。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。

Matplotlib特点

  Matplotlib支持LaTeX 的公式插入。
  Matplotlib支持交互式和非交互式绘图。
  Matplotlib可将图像保存成PNG等多种形式。
  Matplotlib支持曲线(折线)图、条形图、柱状图、饼图。
  Matplotlib类似于MATLAB的绘图函数,上手较为简单。

Matplotlib应用

Matplotlib绘制二维直线

1
2
3
4
5
6
7
8
9
10
11
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) - 0.5

# plt.plot(x, y, color, linewidth, linestyle, label, alpha, marker=None) 画出x-y二维图形,color指颜色,linewidth指线宽,linestyle指线的形式,label指图形的标签,alpha指透明度,marker指该点的形状
plt.plot(x, y, color='red', linewidth=0.5, alpha=0.8)

# plt.show() 显示所画的图形
plt.show()

1

matplotlib修饰图形

style.use方法

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import numpy as np

# plt.style.use(option) 设置窗口风格,option可选'dark_background','bmh','grayscale','ggplot','fivethirtyeight'
plt.style.use('ggplot')

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) - 0.5

plt.plot(x, y)

plt.show()

24

grid方法

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) - 0.5

plt.plot(x, y)

# plt.grid(b=True, color, linewidth, linestyle) 设置坐标系网格,b=True表示显示网格(默认为True),False表示关闭网格,color指网格的颜色,linewidth指网格的宽度,linestyle指网格的类型
plt.grid()

plt.show()

20

grid方法

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) - 0.5

plt.plot(x, y)

# plt.grid(b=True, color, linewidth, linestyle) 设置坐标系网格,b=True表示显示网格(默认为True),False表示关闭网格,color指网格的颜色,linewidth指网格的宽度,linestyle指网格的类型
plt.grid()

plt.show()

20

axis方法

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 31)
y = x ** 2

plt.plot(x, y)

# plt.axis(b) 设置坐标系网格,b='on'表示显示坐标轴(默认为'on'),'off'表示关闭坐标轴,'equal'指坐标轴比例相同,'auto'自动调整坐标轴比例
plt.axis('equal')

plt.show()

21

subplot方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 31)
y_1 = x
y_2 = x ** 2
y_3 = np.exp(x)
y_4 = np.log(x)

# plt.subplot(r, c, n) 将一个窗口分成r行c列,当前子窗口处于第n个
plt.subplot(2,2,1)
plt.plot(x, y_1, label='$x$')
plt.legend()

plt.subplot(2,2,2)
plt.plot(x, y_2, label='$x^2$')
plt.legend()

plt.subplot(2,2,3)
plt.plot(x, y_3, label='$e^x$')
plt.legend()

plt.subplot(2,2,4)
plt.plot(x, y_4, label='$log(x)$')
plt.legend()

plt.show()

22

subplot2grid方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 31)
y_1 = x
y_2 = x ** 2
y_3 = np.exp(x)
y_4 = np.log(x)

# plt.subplot2grid((r, c), (begin, end), colspan=1, rowspan=1) 将一个窗口分成r行c列,当前窗口的位置在(begin, end),横跨m个单位(默认为1个单位),纵跨n个单位(默认为1个单位)
plt.subplot2grid((3, 2),(0, 0), colspan=2, rowspan=1)
plt.plot(x, y_1, label='$x$')
plt.legend()

plt.subplot2grid((3, 2), (1, 0))
plt.plot(x, y_2, label='$x^2$')
plt.legend()

plt.subplot2grid((3, 2), (1, 1))
plt.plot(x, y_3, label='$e^x$')
plt.legend()

plt.subplot2grid((3, 2), (2, 0), colspan=2, rowspan=1)
plt.plot(x, y_4, label='$log(x)$')
plt.legend()

plt.show()

23

xlim,ylim方法

1
2
3
4
5
6
7
8
9
10
11
12
13
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) - 0.5

plt.plot(x, y)

# plt.xlim((x_min, x_max)),plt.ylim((y_min, y_max)) 限制x,y坐标轴的范围
plt.xlim((-1.5, 1.5))
plt.ylim((-1, 1))

plt.show()

3

xlabel,ylabel方法

1
2
3
4
5
6
7
8
9
10
11
12
13
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) - 0.5

plt.plot(x, y)

# plt.xlabel(x_describe),plt.ylabel(y_describe) 设置x,y的坐标轴标签
plt.xlabel('x')
plt.ylabel('x^2-0.5')

plt.show()

4

xticks,yticks方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(2)

x = np.arange(1,13)
y = np.random.randint(50, 100, 12)

plt.plot(x, y)

# plt.xticks(list_x),plt.yticks(list_y) 设置x,y的角标,支持latex格式。
plt.xticks(x)
plt.yticks([60, 80, 90, 100], [r'$bad$', r'$good$', r'$nice$', r'$excellent$'])

plt.show()

5

gca方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) - 0.5

plt.plot(x, y)

# plt.gca 获取坐标脊
ax = plt.gca()

# 将上方和右侧的坐标轴删除
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 设置x,y轴为下方和左侧的脊
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

# 设置坐标轴原点为(-0.1, -0.2)
ax.spines['bottom'].set_position(('data', -0.2))
ax.spines['left'].set_position(('data', -0.1))

plt.show()

6

legend方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) + 1
z = np.exp(x)

plt.plot(x, y)
plt.plot(x, z)

# plt.legend(handles, labels, loc='best') 设置图例,可以在handles和labels中写入多个,handle省略则按照图形的产生顺序设置图例,loc='best'指默认放在空白最好的位置
plt.legend(labels=[r'$x^2+1$', r'$e^x$'])

plt.show()

7

annotate方法

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) - 0.5

plt.plot(x, y)

# plt.annotate(formulation, xy, xytext, fontsize, arrowprops) 在xy附近添加注解formulation,xytext为注解的位置,fontsize为注解的大小,arrowprops为箭头类型
plt.annotate(r'$x^2-0.5$', (0, -0.5), xytext=(+0.25, 0), arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=0.2'))

plt.show()

8

text方法

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) - 0.5

plt.plot(x, y)

# plt.text(x, y, text, fontdict) 在(x,y)处添加文本文字text,文字的大小颜色在fontdict定义
plt.text(0, -0.2, r'$x^2-0.5$', fontdict={'size':20, 'color':'red'})

plt.show()

9

matplotlib绘制散点图

scatter方法

1
2
3
4
5
6
7
8
9
10
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 21)
y = np.power(x, 2) - 0.5

# plt.scatter(x, y, color, s, label) 绘制x-y散点图,颜色为color,大小为s,标签为label
plt.scatter(x, y, color='blue', s=3.0)

plt.show()

10

matplotlib绘制条形图

bar方法

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1)

x = np.arange(10)
y = np.random.rand(10)

# plt.bar(x, y, facecolor, edgecolor) 绘制x-y条形图,facecolor为内部颜色,edgecolor为边缘颜色
plt.bar(x, y)

plt.show()

11

matplotlib绘制等高线图

contourf,contour,clabel方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-1,1,100)
y=np.linspace(-1,1,100)
x, y=np.meshgrid(x, y)
z = np.power(x, 2) + np.power(y, 2)

# plt.contourf(x, y, z, n, alpha, cmap) 绘制(x, y, z)二维等高线图,n指等高线的条数,alpha为透明度,cmap=plt.hot()绘制热图,cmap=plt.cool()绘制冷图
plt.contourf(x, y, z, 8, alpha=0.5, cmap=plt.hot())

# plt.contour(x, y, z, n, colors) 绘制(x, y, z)二维等高线
contour=plt.contour(x, y, z, 8, colors='black')

# plt.clabel(contour, inline=True, fontsize) #在等高线contour中添加数字
plt.clabel(contour)

plt.show()

12

matplotlib绘制直方图

hist方法

1
2
3
4
5
6
7
8
9
10
11
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1)

x = np.random.randn(10000)

# plt.hist(x, bins, color, normed=False) 将x绘制直方图,bins为直方图分组的个数,color为直方图的颜色,normed为是否标准化
plt.hist(x, 100)

plt.show()

13

matplotlib绘制饼状图

pie方法

1
2
3
4
5
6
7
8
9
import matplotlib.pyplot as plt

x = [0.2236, 0.2664, 0.3218, 0.1882]
label = ['first quarter', 'second quarter', 'third quarter', 'fourth quarter']

# plt.pie(x, labels, autopct, explode, shadow=False) 将x绘制饼状图,labels为每个部分的标签,autopct为百分数的格式,explode指是否突出显示,shadow为是否添加阴影
plt.pie(x, labels=label, autopct='%.2f%%', explode=[0, 0, 0.1, 0], shadow=True)

plt.show()

14

matplotlib填充图形

fill,fill_between方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(0,4*np.pi,100)
y_1 =np.sin(x)
y_2 =np.sin(2 * x)

# plt.fill(x, y, color, alpha, interpolate=False) 对x,y图形与x轴进行填充,颜色为color,透明度为alpha,interpolate为是否精确填充
plt.figure(1)
plt.fill(x, y_1, color='r', alpha=0.5)

# plt.fill_between(x, y_1, y_2, where, facecolor, interpolate=False) 对x,y_1图形与x,y_2图形进行填充,填充方式为where,颜色为color,透明度为alpha,interpolate为是否精确填充
plt.figure(2)
plt.plot(x, y_1)
plt.plot(x, y_2)
plt.fill_between(x, y_1, y_2, where=y_1 > y_2, facecolor='red', interpolate=True)
plt.fill_between(x, y_1, y_2, where=y_1 < y_2, facecolor='blue', interpolate=True)

plt.show()

15

matplotlib绘制几何图形

Cicle,Rectangle,Polygon,Ellipse方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import numpy as np

fig, ax=plt.subplots()

clc=[.2,.2]
rec=[.2,.8]
pol=np.array([0.7,0.1,0.8,0.3,0.9,0.3,0.6,0.5]).reshape(4,2)
eli=[.8,.8]

# mpatches.Circle(c, r, color) 产生c为圆心,r为半径,颜色为color的圆形
cicle=mpatches.Circle(clc,0.1,color='blue')
ax.add_patch(cicle)

# mpatches.Rectangle(c, length, width, color) 产生左下角坐标为c,长为length,宽为width,颜色为color的矩形
rectangle=mpatches.Rectangle(rec,0.2,0.1,color='red')
ax.add_patch(rectangle)

# mpatches.Polygon(pol, color) 产生各个定点为pol的多边形
polygon=mpatches.Polygon(pol,color='green')
ax.add_patch(polygon)

# mpatches.Ellipse(c, a, b,color) 产生圆心为c,长轴为a,短轴为b的椭圆
ellipse=mpatches.Ellipse(eli,0.4,0.2,color='yellow')
ax.add_patch(ellipse)

plt.axis('equal')
plt.grid(True)

plt.show()

16

matplotlib绘制二维数据

imshow,colorbar方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1)

x = np.random.uniform(0, 255, (5,5))
x
# plt.imshow(array, interpolation='nearest', cmap='hot', origin='upper') 显示二维数据,interpolation为插值方式,默认为最近邻,cmap为颜色显示方式(默认为hot),可以为'hot','cool','rainbow','bone',origin为图形绘制的方向,upper从上到下,lower自下而上。
plt.imshow(x, cmap='bone')

# plt.colorbar() 添加颜色棒
plt.colorbar()

plt.show()

17

matplotlib绘制3D图形

Axes3D,plot_surface方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as mp
import numpy as np

fig = plt.figure()
x = np.arange(-4, 4, 0.25)
y = np.arange(-4, 4, 0.25)
x, y = np.meshgrid(x, y)
z = np.sqrt(x**2 + y**2)
z = np.sin(z)

# mp.Axes3D(fig) 生成3D窗口
ax = mp.Axes3D(fig)

# obj.plot_surface(x, y, z, rstride=1, cstride=1, cmap=None) 画出3D表面图形,rstride为行跨度,cstride为列跨度,cmap为颜色显示方式同plt.imshow
ax.plot_surface(x, y, z, cmap='rainbow')

plt.show()

18

matplotlib极坐标系

subplot方法

1
2
3
4
5
6
7
8
9
10
11
12
import matplotlib.pyplot as plt
import numpy as np

theta = np.linspace(-np.pi, np.pi, 100)
r = 0.5 * (1 + np.cos(theta))

# plt.subplot(111, projection='polar') 绘制极坐标
fig = plt.subplot(111, projection='polar')

fig.plot(theta, r)

plt.show()

19

Matplotlib小结

  通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图。在数据分析,机器学习,深度学习中,要对当前的数据进行实时的显示或者对准确率有直观的展示,需要借助Matplotlib的帮助,因此Matplotlib也作为机器学习三剑客之一。

-------------本文结束感谢您的阅读-------------
0%