(一)1.如何绘制散点图
1
2
3
4
5
6
7
8
9
10
11
12
|
import numpy as np import matplotlib.pyplot as plt # 如何绘制散点图 # 先随机生成数据 x = np.array( range ( 100 )) y = np.sin(x) # 直接输入x和y便可绘制相应的散点图 plt.scatter(x, y) # 不要忘了这句话,表示让图像显示 plt.show() |
可以看到类似于正弦曲线一样的点
(一)2.如何给散点图加上样式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import numpy as np import matplotlib.pyplot as plt x = np.array( range ( 0 , 100 , 5 )) y = 3 * x + 2 # scatter里面的参数有很多,不过我们主要使用四种 # 1:s,表示点的面积,注意是面积。 # 2:c,颜色,不指定默认为蓝色 # 3:marker:点的形状,不指定默认为点 # 4:alpha:透明度,不指定默认为1,表示透明度为0 plt.scatter(x, y, s = 100 , c = "green" , marker = "<" , alpha = 0.1 ) plt.show() |
(二)1.如何绘制折线图
1
2
3
4
5
6
7
8
9
|
import numpy as np import matplotlib.pyplot as plt x = np.linspace( - 1 , 1 , 100 ) y = x * * 2 plt.plot(x, y) # 此外还有一个plt.plot_date()函数,专门用来绘制有一个轴是日期格式的数据 plt.show() |
(二)2.如何给折线图加上样式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import numpy as np import matplotlib.pyplot as plt x = np.linspace( - 10 , 10 , 20 ) y = x * * 2 z = x * 2 + 1 # 关于样式的参数有很多 # linestyle:表示线段的样式 # color:表示颜色 # marker:表示点的样式 plt.plot(x, y, linestyle = "-" , color = "green" , marker = "o" ) plt.plot(x, z, linestyle = "--" , color = "red" , marker = "<" ) plt.show() |
(三)1.如何绘制条形图
1
2
3
4
5
6
7
8
9
10
11
|
import numpy as np import matplotlib.pyplot as plt # 还记得每一个图对应的每一个函数吗? # 散点图:scatter # 折线图:plot # 条形图:bar # 这个函数可以只接收两个参数,分别是条形图中每一条的索引和高度 plt.bar(x = [ 0 , 1 , 2 , 3 , 4 , 5 ], height = [ 11 , 22 , 33 , 44 , 55 , 66 ]) plt.show() |
(三)2.如何给条形图加上样式
1
2
3
4
5
6
7
8
9
10
|
import matplotlib.pyplot as plt # color:颜色 # width:线条宽度 plt.bar(x = [ 0 , 1 , 2 , 3 , 4 , 5 ], height = [ 11 , 22 , 33 , 44 , 55 , 66 ], color = "green" , width = 0.2 ) plt.show() |
(三)3.如何绘制横向的条形图
1
2
3
4
5
6
7
8
9
10
11
12
|
import matplotlib.pyplot as plt # 如果绘制横向的条形图 # 那么bottom相当于之前的x,width相当于之前的height plt.bar(x = 0 , bottom = [ 0 , 1 , 2 , 3 , 4 , 5 ], width = [ 11 , 22 , 33 , 44 , 55 , 66 ], color = "green" , height = 0.2 , orientation = "horizontal" ) # 还有一个plt.barh(),表示花水平的条形图,不用显示的指定orientation="horizontal",但其他的参数还是要有的 plt.show() |
(四)1.如何绘制直方图
1
2
3
4
5
6
7
8
9
10
11
12
|
import numpy as np import matplotlib.pyplot as plt mu = 100 sigma = 20 x = mu + sigma * np.random.randn( 2000 ) # 设置直方图 # bins:表示要分成多少个区间 # normed:表示是否进行标准化,标准化之后,那么纵坐标不在是个数,而是频率。 plt.hist(x, bins = 30 , color = "red" , density = True ) plt.show() |
(四)2.如何绘制双变量直方图
1
2
3
4
5
6
7
8
9
10
|
import numpy as np import matplotlib.pyplot as plt x = np.random.randn( 1000 ) + 2 y = np.random.randn( 1000 ) + 3 plt.hist2d(x, y, bins = 40 ) plt.show() |
(五)1.如何绘制饼图
1
2
3
4
5
6
7
8
9
10
|
import matplotlib.pyplot as plt labels = [ "satori" , "mashiro" , "nagisa" ] fracs = [ 40 , 30 , 30 ] # 最重要的两个参数 # x:所占的份额 # labels:对应的标签 plt.pie(x = fracs, labels = labels) plt.show() |
细心地哲学♂家可能回好奇,为什么是一个椭圆,这是因为我们这里少了一句话
而且每一块上面光秃秃的,每个部分都贴在了一块,也不好看,我们也可以设置一些参数,让其变得好看一些
1
2
3
4
5
6
7
8
9
10
|
import matplotlib.pyplot as plt labels = [ "satori" , "mashiro" , "nagisa" ] fracs = [ 40 , 30 , 30 ] # 加上这句话表示x和y轴的比例是一比一 # 因此图形就变成了圆形 plt.axes(aspect = 1 ) # autopct:表示每一块的比例 # explode:突出显示,每个部分不会贴在一块<br><br># shadow:表示加上一层阴影,指定为True即可 |
1
|
plt.pie(x = fracs, labels = labels, autopct = "%.0f%%" , explode = [ 0.01 , 0.02 , 0 ]) plt.show() |
(六)1.如何绘制箱形图
1
2
3
4
5
6
7
8
9
10
|
import matplotlib.pyplot as plt import numpy as np np.random.seed( 100 ) data = np.random.normal( 0 , 1 , size = 1000 ) # sym:形状,表示异常值的形状 # whis:表示虚线的长度,可以控制异常值显示的多少,越大虚线越长 plt.boxplot(data, sym = "<" , whis = 1.5 ) plt.show() |
(七)颜色和样式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
蓝色 - 'b' 绿色 - 'g' 红色 - 'r' 青色 - 'c' 品红 - 'm' 黄色 - 'y' 黑色 - 'k' 白色 - 'w' |
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 |
输入样式的时候还有一个简便的方法,cx--,c是青色,x是点的样式,--是线的样式
(八)1.如何绘制子图
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
|
import numpy as np import matplotlib.pyplot as plt x = np.arange( 0 , 100 , 5 ) # 生成一个画布 fig = plt.figure() # 往画布上添加对象 # 这里的221表示,生成一个2X2的画布,并处于第一个位置 s1 = fig.add_subplot( 221 ) s2 = fig.add_subplot( 222 ) s3 = fig.add_subplot( 223 ) s4 = fig.add_subplot( 224 ) y1 = np.exp(x) y2 = np.sin(x) y3 = np.cos(x) y4 = x * * 2 s1.plot(x, y1, "cx--" ) s2.plot(x, y2, "bo-." ) s3.plot(x, y3, "g<--" ) s4.plot(x, y4, "y>-." ) # 最后显示要用fig,因为它是我们创建出来的画布,必须要让它显示 fig.show() |
(八)2.如何绘制子图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import numpy as np import matplotlib.pyplot as plt x = np.arange( 0 , 100 , 5 ) plt.subplot( 221 ) plt.plot(x, np.exp(x)) plt.subplot( 222 ) plt.plot(x, np.sin(x)) plt.subplot( 223 ) plt.plot(x, np.cos(x)) plt.subplot( 224 ) plt.plot(x, x * * 2 ) plt.show() |
(九)如何绘制网格
1
2
3
4
5
6
7
8
9
10
|
import numpy as np import matplotlib.pyplot as plt x = np.arange( 0 , 100 , 5 ) # 绘制出格子 plt.grid(x, color = "green" ) # 绘制线段 plt.plot(x, x, "cx--" ) plt.show() |
(十)如何给图像带上标记
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
# 加上需要的标签label
plt.plot(x, y1, label="np.sin")
plt.plot(x, y2, label="np.cos")
plt.plot(x, y3, label="np.tan")
# 必须加上这句话,否则标签不显示
# legend里面还有一个location参数,可以指定位置
# 以及ncol可以指定要标签分几列显示
plt.legend()
plt.show()
(十一)调整坐标轴范围
1
2
3
4
5
6
7
8
9
10
|
import numpy as np import matplotlib.pyplot as plt x = np.arange( - 100 , 100 ) y = 3 * x + 1 plt.plot(x, y) # 表示x轴从-10到10,y轴-100到100<br># 也可以通过plt.xlim([,])和plt.ylim([,])只调x轴或y轴<br># 如果只想调整一边的话,就直接指定最大或者最小,xlim(xmin=,xmax=),ylim(ymin=,ymax=) plt.axis([ - 10 , 10 , - 100 , 100 ]) plt.show() |
(十二)调整坐标轴刻度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import numpy as np import matplotlib.pyplot as plt x = np.arange( 1 , 10 ) plt.plot(x, x) # 获取坐标轴属性,get current axis ax = plt.gca() # nbins表示有多少间隔,可以看到分成了20份 ax.locator_params(nbins = 20 ) # 如果我只想调整某一个轴的话 # 指定ax.locator_params("x", nbins=20) plt.show() |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import datetime start = datetime.date( 2016 , 1 , 1 ) end = datetime.date( 2017 , 1 , 1 ) timedelta = datetime.timedelta(days = 1 ) date = mpl.dates.drange(start, end, timedelta) y = np.random.rand( len (date)) ax = plt.gca() plt.plot_date(date, y) # 设置时间格式 date_format = mpl.dates.DateFormatter( "%Y-%m-%d" ) # 将格式应用到x轴上 ax.xaxis.set_major_formatter(date_format) plt.show() |
(十三)如何添加坐标轴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import numpy as np import matplotlib.pyplot as plt x = np.arange( 2 , 20 , 1 ) y1 = x y2 = np.log(x) fig = plt.figure() ax1 = fig.add_subplot( 111 ) ax1.plot(x, y1) ax1.set_ylabel( "mashiro" ) # 表示生成一个双胞胎y轴,twinx,表示生成一个y轴 ax2 = ax1.twinx() ax2.plot(x, y2) ax2.set_ylabel( "satori" ) fig.show() |
(十四)添加注释
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import numpy as np import matplotlib.pyplot as plt x = np.arange( - 10 , 11 ) y = x * * 2 plt.plot(x, y) plt.annotate( "my name is satori" , xy = ( 0 , 5 ), # 箭头坐标 xytext = ( 0 , 20 ), # 文本坐标 arrowprops = { "facecolor" : "r" , # 颜色 "headlength" : 10 , # 箭头的长度 "headwidth" : 30 , # 箭头的头的宽度 "width" : 20 # 箭头的身体的宽度 } ) plt.show() |
(十五)如何绘制3D图形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D as A3 fig = plt.figure() ax = A3(fig) x = np.arange( - 4 , 4 , 0.2 ) y = np.arange( - 4 , 4 , 0.2 ) x, y = np.meshgrid(x, y) z = np.power(x, 2 ) + np.power(y, 2 ) plt.title( "satori" ) # rstride,cstride表示行列每隔多少个点建一个面,cmap表示颜色 ax.plot_surface(x, y, z, rstride = 1 , cstride = 1 , cmap = plt.cm.CMRmap, alpha = 0.4 ) ax.set_xlabel( 'x_label' , color = 'r' ) ax.set_ylabel( 'y_label' , color = 'g' ) ax.set_zlabel( 'z_label' , color = 'b' ) plt.show() |
如何解决中文乱码问题
1
2
3
4
|
import matplotlib.pyplot as plt plt.rcParams[ 'font.sans-serif' ] = [ 'SimHei' ] # 步骤一(替换sans-serif字体) plt.rcParams[ 'axes.unicode_minus' ] = False # 步骤二(解决坐标轴负数的负号显示问题) |
解决子图重合问题
plt.tight_layout()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import numpy as np import matplotlib.pyplot as plt x = np.arange( 1 , 100 ) y = 2 * x plt.plot(x, y) # 调整x,y轴的取值范围 plt.xlim( 10 , 30 ) plt.ylim( 20 , 60 ) # 调整x或y轴的间隔 ax = plt.gca() ax.locator_params( "x" , nbins = 40 ) # 调整x或y轴坐标的倾斜程度 plt.xticks(rotation = 60 ) plt.show() |