1.导入 Matplotlib 设置绘图样式

1
2
3
4
5
#导入 matplotlib 模块
import matplotlib as mpl
import marplotlib.pyplot as plt
#设置样式风格为经典
plt.style.use('classic')

2.几种画图显示的方式

1.在脚本中画图

新建 .py 文件,输入如下代码后执行。

1
2
3
4
5
6
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x))
plt.show()

可以看到会有一个新窗口显示图像。

一个 Python 会话中只能使用一次 plt.show() ,因此通常需要将其放在脚本的最后。

2.Ipython shell 中画图

1577502063179

可以实时更新,输入不同的命令线条会自动更新。

3.IPython notebook 中画图

1
2
3
4
5
6
7
8
9
%matplotlib inline
import numpy as np
x = np.linspace(0,10,100)
fig = plt.figure() #创建坐标轴
plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x))

# %matplotlib inline 启动静态图形
# %matplotlib notebook 启动交互式图形

1577502886652

3.将图形保存为文件

1
2
3
4
5
6
7
8
9
10
11
12
13
In [16]: %matplotlib
Using matplotlib backend: Qt5Agg
In [17]: import matplotlib.pyplot as plt
In [18]: import numpy as np
In [19]: fig = plt.figure()
In [20]: plt.plot(x,np.sin(x))
Out[20]: [<matplotlib.lines.Line2D at 0x263a7348c08>]
In [21]: plt.plot(x,np.cos(x))
Out[21]: [<matplotlib.lines.Line2D at 0x263a4ad45c8>]
In [22]: fig.savefig('my_figure.png') #保存文件
In [26]: from IPython.display import Image
In [27]: Image('my_figure.png') #查看文件
Out[27]: <IPython.core.display.Image object>

Matplotlib 支持的图形格式如下:

1577503493256

4.面向对象接口的画图方法

1
2
3
4
5
6
7
8
#先创建图形网格
#ax 是一个包含两个 Axes 对象的数组
fig,ax = plt.subplots(2)
print(type(ax))
#<class 'numpy.ndarray'>
#在每个对象上调用plot()方法
ax[0].plot(x,np.sin(x))
ax[1].plot(x,np.cos(x))

1577503795491

5.绘制简易线性图

1
2
3
4
5
6
%matplotlib inline 
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure() #创建图形 fig
ax = plt.axes() #创建坐标轴 ax

1

如上图所示, Matplotlib 里面,figure 类的一个实例可以被看作一个能够容纳各做标轴,图形,文字和标签的容器,axes 类的一个实例,是一个带有刻度和标签的矩形,最终会包含所以可视化的图形元素。

ax 实例创建好以后,我们就可以调用 ax.plot 方法进行画图。

1
2
3
4
5
6
7
8
9
%matplotlib inline 
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0,10,100)
ax.plot(x,np.sin(x))
ax.plot(x,np.cos(x))

2

6.调整线条的颜色和风格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
%matplotlib inline 
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(-15,10,1000)
#linestyle 指定线型 color 指定颜色
ax.plot(x,x+0,linestyle='-',color='b') #蓝色实线
ax.plot(x,x+1,linestyle='--',color='r') #红色虚线
ax.plot(x,x+2,linestyle='-.',color='g') #绿色点划线
ax.plot(x,x+3,linestyle=':',color='c') #青色实点线
#也可以将其结合写成如下形式
ax.plot(x,x+5,'-g') #表示绿色实线

3

7.设置坐标上下限

1
2
3
plt.plot(x,np.sin(x))
plt.xlim(-1,11) #x轴
plt.ylim(-1.5,1.5) #y轴

4

1
2
3
plt.plot(x,np.sin(x))
plt.xlim(-1,11)
plt.ylim(1.5,-1.5) #y轴坐标逆序

5

1
2
3
plt.plot(x,np.sin(x))
plt.axis([-1,12,-2.5,5])
plt.axis('tight') #'收紧'布局

6

1
2
3
plt.plot(x,np.sin(x))
plt.axis([-1,12,-2.5,5])
plt.axis('equal') #'相等布局'

7

8.设置图形标签

1
2
3
4
5
plt.plot(x,np.sin(x))
plt.axis('tight')
plt.title('A study') # 标题标签
plt.xlabel('x') # x轴标签
plt.ylabel('sin(x)') # y轴标签

8

1
2
3
4
5
6
7
8
9
#使用 plt.legend() 在 plot 方法中利用 label 参数设置 
fig = plt.figure()
ax = plt.axes()
x = np.linspace(-15,10,1000)
ax.plot(x,np.sin(x),'-g',label='sin(x)')
ax.plot(x,np.cos(x),':r',label='cos(x)')
ax.plot(x,x+1,'--b',label='x+1')
ax.plot(x,x+2,'-.k',label='x+2')
plt.legend()

9

9.plot 帮助文档解析

数据可视化的时候主要是在调用 plot 方法,书上写的不是很清楚,来参考一下帮助文档。

1
2
3
4
5
6
7
8
9
10
11
plt.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
#Docstring: 描述
#Plot y versus x as lines and/or markers. 将y与x绘制为线或标记
#Call signatures:: 调用方式
#plot([x], y, [fmt], *, data=None, **kwargs)
#plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
#The optional parameter *fmt* is a convenient way for defining basic
#formatting like color, marker and linestyle.
#可选参数*fmt*是定义基本格式,如颜色、标记和线型。
#When conflicting with *fmt*, keyword arguments take precedence.
#当与*fmt*冲突时,关键字参数优先。

参数解释:

x,y:数据点的水平/垂直坐标,x值是可选的,默认为 range(len(y)) 参见如下代码:

1
2
3
4
5
6
7
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
fig = plt.figure()
ax = plt.axes()
y = pd.Series([1,2,3,4])
ax.plot(y,'o')

11

而 x,y 也可以是标量或二维的。

1
2
3
4
5
6
7
8
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
fig = plt.figure()
ax = plt.axes()
x = ((2,2),(3,3),(4,4),(5,5))
y = ((1,2),(2,3),(4,5),(5,6))
ax.plot(x,y,'o')

12

fmt :原文档如下

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
fmt : str, optional
A format string, e.g. 'ro' for red circles. See the *Notes*
section for a full description of the format strings.

Format strings are just an abbreviation for quickly setting
basic line properties. All of these and more can also be
controlled by keyword arguments.

This argument cannot be passed as keyword.
#fmt:str,可选,格式字符串,例如红色圆圈的“ro”,格式字符串只是快速设置的缩写
#由关键字参数控制,此参数不能作为关键字传递。
#可以被传入的有以下的关键字:

#agg_filter: a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array
#alpha: float
#animated: bool
#antialiased or aa: bool
#clip_box: `.Bbox`
#clip_on: bool
#clip_path: [(`~matplotlib.path.Path`, `.Transform`) | `.Patch` | None]
#color or c: color
#contains: callable
#dash_capstyle: {'butt', 'round', 'projecting'}
#dash_joinstyle: {'miter', 'round', 'bevel'}
#dashes: sequence of floats (on/off ink in points) or (None, None)
#drawstyle or ds: {'default', 'steps', 'steps-pre', 'steps-mid', 'steps-post'}, default: 'default'
#figure: `.Figure`
#fillstyle: {'full', 'left', 'right', 'bottom', 'top', 'none'}
#gid: str
#in_layout: bool
#label: object
#linestyle or ls: {'-', '--', '-.', ':', '', (offset, on-off-seq), ...}
#linewidth or lw: float
#marker: marker style
#markeredgecolor or mec: color
#markeredgewidth or mew: float
#markerfacecolor or mfc: color
#markerfacecoloralt or mfcalt: color
#markersize or ms: float
#markevery: None or int or (int, int) or slice or List[int] or float or (float, float)
#path_effects: `.AbstractPathEffect`
#picker: float or callable[[Artist, Event], Tuple[bool, dict]]
#pickradius: float
#rasterized: bool or None
#sketch_params: (scale: float, length: float, randomness: float)
#snap: bool or None
#solid_capstyle: {'butt', 'round', 'projecting'}
#solid_joinstyle: {'miter', 'round', 'bevel'}
#transform: `matplotlib.transforms.Transform`
#url: str
#visible: bool
#xdata: 1D array
#ydata: 1D array
#zorder: float

这里列几个现在用到的:

1
2
3
4
5
6
7
8
alpha #透明度
fillstyle: {'full', 'left', 'right', 'bottom', 'top', 'none'} #散点的填充风格
label: object #设置图例标签 与 plt.legend() 匹配使用
linestyle or ls: {'-', '--', '-.', ':', '', (offset, on-off-seq), ...} #线型
markeredgecolor or mec: color #散点边缘颜色
markeredgewidth or mew: float #散点边缘线宽
markerfacecolor or mfc: color #散点内部填充颜色
markersize or ms: float #点的尺寸

点的样式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
``'.'``          #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'`` #thin_diamond marker
``'|'`` #vline marker
``'_'`` #hline marker

线的样式:

1
2
3
4
``'-'``          #solid line style
``'--'`` #dashed line style
``'-.'`` #dash-dot line style
``':'`` #dotted line style

颜色:

1
2
3
4
5
6
7
8
``'b'``          #blue
``'g'`` #green
``'r'`` #red
``'c'`` #cyan
``'m'`` #magenta
``'y'`` #yellow
``'k'`` #black
``'w'`` #white