蓝色字体为单词,一些我本身认识的单词就再也不罗列,好比font编程
灰色字体为函数的形参,形参在罗列的时候会省略部分默认值,阅读时可跳过灰色部分字体app
棕色部分字体为我本身的疑惑,有待解答,若是你看到以为easy,欢迎留言教教我dom
本章内容基于《Python编程 从入门到实践》,做者Eric Mattheside
【数据可视化】函数
matplotlib是Python的一种绘图库,内含许多制做图表的工具工具
【15.2绘制简单的折线图】测试
plot /plɑ:t/ v.以图表画出、绘图字体
figure /ˈfigjər/ n.图形、图表,人物,数字spa
args→argumentsn.参数(与parameter相比,特指实参)scala
kwargs→KeyWordArguments n.关键字参数
pyplot模块包含许多生成图表的函数,咱们绘制一个简单的折线图:
1 import matplotlib.pyplot as plt 2 squares = [1, 4, 9, 16, 25] 3 plt.plot(squares) 4 plt.show()
先从绘图库matplotlib中导入pyplot模块并命名为plt,定义一个数列squares
plt.plot([x] , y , [fmt] , **kwargs)
plt.plot([x] , y , [fmt] , [x2] , y2 , [fmt2] , ... , **kwargs)
#fmt为format的简写,传入该参数可设置表现数据的形式,如'r+'(红十字点)、'bo'(蓝色圆点)
plt.plot( )函数会尝试将接收到的数据绘制成有意义的图形,而plt.show( )打开matplotlib查看器并显示绘制的图形
观察得知,plt.plot( )将接收到的数据从0到4一一映射,并连线绘制成折线统计图
【15.2.1修改标签文字和线条粗细】
axis /ˈæksis / n.轴,轴心国(其复数形式为axes)
tick /tik/ v.打钩
param /.../ n.参数(与argument相比,特指形参)
matplotlib容许调整可视化的各个方面,咱们对上图进行改善:
1 import matplotlib.pyplot as plt 2 3 squares = [1, 4, 9, 16, 25] 4 plt.plot(squares, linewidth = 5) 5 6 plt.title('Square Numbers', fontsize = 24) 7 plt.xlabel('Value', fontsize = 14) 8 plt.ylabel('Square of Value', fontsize) 9 10 plt.tick_params(axis = 'both', labelsize = 14) 11 12 plt.show()
咱们在plt.show( )以前添加一些代码
①在plt.plot( )中添加参数linewidth,修改线条的粗细
②plt.title( )能够设置图表标题,经过fontsize参数调整字体大小
plt.title(label , **kwargs)
③plt.xlabel( )和plt.ylabel( )分别可设置x轴和y轴的标题,及大小
plt.xlabel(xlabel , **kwargs)plt.ylabel(ylabel , **kwargs)
④图表中x轴y轴的分度值被称为标签,plt.tick_params( )首先要求参数axis,axis的选项有3个:'x'、'y'和'both',默认为'both';经过肯定参数axis指定对x轴或y轴作出修改;而修改则是经过指定参数labelsize的值
plt.tick_params(axis = 'both' , **kwargs)
【15.2.2校订图形】
对于plt.plot( ),正如你所见到的形参有([x] , y , [fmt] , **kwargs),上面只传入了squares一个参数,Python默认赋值给形参中的y值
咱们看的图形中的数据并无被正确绘制,缘由在于x轴从0开始;为改变这种默认行为,咱们需同时提供x值和y值:
1 input_values = [1, 2, 3, 4, 5] 2 squares = [1, 4, 9, 16, 25] 3 plt.plot(input_values, squares, linewidth = 5)
【15.2.3绘制散点图】
scatter /ˈskætɚ/ v.散开、分散
有时候,咱们须要绘制散点图,这时须要使用函数scatter( ) 与plot( )传入fmt参数何异?
plt.scatter(x , y , ... , **kwargs)
1 import matplotlib.pyplot as plt 2 plt.scatter(2, 4) 3 plt.show()
在打开的图形中你会发现点(2 , 4)位于表格的正中央,并被显示以一个蓝色的圆点
咱们还能够经过修改scatter( )的参数来设置输出图形的样式
1 plt.scatter(2, 4, s = 200)
plt.scatter(x , y , s = None , ... , **kwargs)
s→size
scalar /ˈskeilɚ/ n.数量、标量 adj.梯状的,分等级的
实参s设置了绘制图形时使用的点的尺寸,你会看到一个更大的蓝点在图表中
1 plt.title('Squares Numbers', fontsize = 24) 2 plt.xlabel('Value', fontsize = 14) 3 plt.ylabel('Square of Value', fontsize = 14) 4 5 plt.tick_params(axis = 'both', which = 'major', labelsize = 14)
以上是对图表的完善,其中的which参数有{'major' , 'minor' , 'both'}选项,分别设置主刻度线、次刻度线以及同时设置
plt.tick_params(axis = 'both' , which = 'major' , ... , **kwargs)
【15.2.4使用scatter( )绘制一系列点】 仍是搞不懂与plot( )传入fmt参数的不一样?
较为简单,直接将上述的x、y值的类型从int(或str)更改成list便可:
1 x_values = [1, 2, 3, 4, 5] 2 y_values = [1, 4, 9, 16, 25] 3 plt.scatter(x_values, y_values, s = 200)
【15.2.5自动计算数据】
当要绘制的点不少的时候,手动输入点的数据的效率十分低下,由于可让Python循环来代替:
1 x_values = list(range(1, 1001)) 2 y_values = [x*x for x in x_values] 3 plt.scatter(x_values, y_values, s = 40) 4 5 plt.axis([0, 2000, 0, 4000000])
让Python自动生成数列,再将数列绘制到图表上
plt.axis(*v, **kwargs)
函数axis( )接收一个可变参数(*v),因为后面的**kwargs存在,因此可变参数的传入需以list或tuple的形式。axis( )接收的*v中包含4个参数,分别是用于设置绘制的图表x轴、y轴的显示范围,即分别为x轴和y轴的最小值和最大值
【15.2.6 - 15.2.8函数scatter( )参数】
【数据点的轮廓】
plt.scatter(x , y , edgecolors = None , ... , **kwargs)
书上设置参数为edgecolor,且写明“默认为蓝色点和黑色轮廓”
但在matplotlib官方文档中,参数名为edgecolors;且在篇头指明edgecolors = None,但在篇末又指明edgecolors = 'face'(轮廓与图形颜色一致)
经测试,参数名为edgecolor与edgecolors等效;默认不为黑色轮廓,应该为'face'
【自定义颜色】
plt.scatter(x , y , c = None , ... , **kwargs)
c→color
经过scatter( )绘制的点默认为蓝色,可传递参数c来更改
参数c可为表示特定颜色的字符串,如'red',也可经过RGB来设置
注意,与普通的255*255*255位RGB不一样,参数c应设置为3个0-1的小数值,分别表示红、绿和蓝的份量
1 plt.scatter(x_values, y_values, c = (0.9, 0.9, 0), s = 40)
经检验,值越接近1,颜色越深
【颜色映射】
map /mæp/ n.地图 v.绘制地图、勘查
颜色映射(colormap)是一系列颜色,从起始颜色渐变到结束颜色
颜色映射用于突出数据的规律,可使用较浅的颜色来显示较小的值,用较深的颜色显示较大的值
plt.scatter(x , y , cmp = None , ... , **kwargs)
1 plt.scatter(x_values, y_values, s = 40, c = y_values, cmap = plt.cm.Blues)
咱们将参数c设置为一个y值列表,即颜色映射的值取自列表y_values;随后传递cmap参数,其告诉pyplot使用哪一个颜色进行映射
注意:映射时的参数c所含元素的数目必须与绘制的点的数目相同
传递cmap参数为plt.cm.Blues后,值较小的点将显示为浅蓝色,值较大的点将显示为深蓝色
'Blues'只是一种颜色映射,若是想了解全部的颜色映射,路径为:
访问http://matplotlib.org/ → 单击Example → 找到Color选项 → 'Colormap Reference'
【15.2.9自动保存图表】
咱们经过plt.show( )来展现图表,而若是要让程序自动将图表保存到文件中,可替换为:
1 plt.savefig('scatter_squares.png', bbox_inches = 'tight')
plt.savefig(fname , bbox_inches = None)
fig→figure
fname→file name
bbox→bounding box(边界框)
经过savefig( ),第一个实参指定要保存图表的文件名;而关键字参数bbox_inches有{'None' , 'tight'}选项,若是指定'tight',会将图表多余的空白区域裁剪掉,这样能够生成一个适中的图表
文件将储存到代码文件所在的目录中
【15.3随机漫步图】
从点(0 , 0)开始,随机地移动某个方向若干距离,记录移动后的点;再在该点上继续随机移动。将全部的点绘制到图表上,得到随机漫步图
【15.3.1建立RandomWalk类】
1 from random import choice 2 class RandomWalk(object): 3 def __init__(self , num_points = 5000): 4 self.num_points = num_points 5 self.x_values = [0] 6 self.y_values = [0] 7 8 def fill_walk(self): 9 while len(self.x_values) < self.num_points: 10 x_direction = choice([1 , -1]) 11 x_distance = choice([0 , 1 , 2 , 3 , 4]) 12 x_step = x_direction * x_distance 13 14 y_direction = choice([1 , -1]) 15 y_distance = choice([0 , 1 , 2 , 3 , 4]) 16 y_step = y_direction * y_distance 17 18 if x_step == 0 and y_step == 0: 19 continue 20 21 self.x_values.append(self.x_values[-1] + x_step) 22 self.y_values.append(self.y_values[-1] + y_step)
建立RandomWalk类要确立3个属性:漫步次数(num_points)、横坐标、纵坐标
咱们使用x_values和y_values分别存储点的横坐标和纵坐标的值,并规定一开始从(0 , 0)点开始。经过choice( )分别为x和y选择方向(direction)、距离(distance),明确下一个点要作出的漫步
if x_step == 0 and y_step == 0: continue代码行代表咱们不接受原地漫步
最后经过x_step和y_step分别与上一个点相加,得出漫步后的点的坐标,并存储
至此,当建立实例rw并调用rw.fill_walk( ),实例rw就拥有了2个长度为5000的列表,列表中的值除(0 , 0)外彻底随机
【15.3.2绘制随机漫步图】
既然rw能够拥有2个长度为5000的列表,那么绘制图表就十分简单了
1 from random_walk import RandomWalk 2 import matplotlib.pyplot as plt 3 4 rw = RandomWalk() 5 rw.fill_walk() 6 plt.scatter(rw.x_values, rw.y_values, s = 5) 7 plt.show()
运行代码,你将看到一副随机漫步图
【15.3.5设置样式】
【15.3.6点着色】
为了体现“漫步”这一动做,咱们经过颜色映射来看看漫步的过程
1 point_numbers = list(range(rw.num_points)) 2 plt.scatter(rw.x_values, rw.y_values, s = 10, c = point_numbers, cmp = plt.cm.Blues)
point_numbers为一个包含0到4999的列表,其做用在参数c上,辅助cmp:首次绘制的点c值为1,最后一个绘制的点c值为4999。这样,首次绘制的点的颜色最浅,随着绘制点的增多,颜色越深,即可以大体观测“漫步”过程
【15.3.7起点和终点】
经过颜色映射呈现了各个点的前后顺序,咱们还能够重点突出绘制的起点和终点
1 plt.scatter(rw.x_values, rw.y_values, s = 2, c = point_numbers, cmp = plt.cm.Blues) 2 plt.scatter(0, 0, s = 50, c = 'green') 3 plt.scatter(rw.x_values[-1], rw.y_values[-1], s = 50, c = 'red')
【15.3.8增长点数】
经过增长绘制的点数,构造一副漂亮的画
【15.3.9隐藏坐标轴】
1 plt.axes().get_xaxis().set_visible(False) 2 plt.axes().get_yaxis().set_visible(False)
plt.axes(arg = None , **kwargs)
使用函数plt.axes( )来将每条坐标轴的可见性都设置为False
△尝试对比plt.axis( )函数,你会发现plt.axis( )也有相似操做:plt.axis('off'),不一样的是,使用plt.axes( )会保留边框线,而plt.axis( )仅呈现绘制的点
详情自行查阅Matplotlib官网
【使用plt.axes( )为何会有警告:warnings.warn(message , mplDeprecation , stacklevel = 1??】
【15.3.10调整窗口尺寸】
你会发现,绘制出来的图表始终是一样大小,不管里面的点数量多或少;当点多时,会显示密集,当点少时,会显示稀疏
当你拉动显示图表的窗口放大或缩小时,里面的图表也会相应做出改变
“图表适合窗口的大学时,更能有效地将数据中的规律呈现出来”,因而咱们添加代码:
1 plt.figure(figsize = (10, 6))
plt.figure(figure = None , ... , **kwargs)
书籍中,仅仅是指出,给figure( )函数的参数figsize传递一个元组,用以指定绘图窗口的尺寸,单位为英寸
可是它没有强调位置!
经反复试验,有如下状况:
①plt.figure( )放在plt.scatter( )以前,成功指定绘图的窗口大小
②plt.figure( )放在plt.scatter( )以后,但在plt.show( )以前,居然建立了两个窗口,一个是plt.figure( )建立的指定大小的窗口,但它是空白的;另外一个是默认窗口,scatter( )绘制的图表在其中,至关于没有使用plt.figure( )指定窗口大小,还无故多了个无用的空白窗口
个人理解是,scatter( )执行过程当中便已经在默认的窗口中完成了绘图,只需show( )便可;假若以后再经过figure( )指定窗口大小,这时只会额外建立一个符号指定的窗口
③plt.figure( )放在plt.show( )以后,根本没用调用plt.figure( )代码行
△综上,建议在早期未调用相关函数以前就调用plt.figure( )
【15.3.11调整分辨率】
【DPI】(Dots Per Inch)每英寸点数,分辨率的度量单位
DPI在专业人士眼中通常只针对输出设备(如打印机)而言,而针对显示器的图像分辨率则用PPI(Pixels Per Inch)表示。但一般DPI便是指分辨率
pixel /pɪksəl/ n.显示器的像素
Python假定屏幕分辨率为80像素/英寸,所以若指定大小的图表尺寸不合适,可以使用形参dpi向figure( )传递本身系统的分辨率:
plt.figure(dpi = 96 , figsize = (10 , 6))
DPI的含义为每英寸像素点,当传递的形参dpi太小,会出现图表显示太小的状况:
【我怎么以为它更细致了??】
'''''''