数据可视化(Matplotlib)

蓝色字体为单词,一些我自己认识的单词就不再罗列,比如font

灰色字体为函数的形参,形参在罗列的时候会省略部分默认值,阅读时可跳过灰色部分字体

棕色部分字体为我自己的疑惑,有待解答,如果你看到觉得easy,欢迎留言教教我

本章内容基于《Python编程 从入门到实践》,作者Eric Matthes

【数据可视化】

matplotlibPython的一种绘图库,内含许多制作图表的工具

15.2绘制简单的折线图】

plot  /plɑ:t/  v.以图表画出、绘图

figure  /ˈfigjər/  n.图形、图表,人物,数字

argsargumentsn.参数(parameter相比,特指实参)

kwargsKeyWordArguments 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)

#fmtformat的简写,传入该参数可设置表现数据的形式,如'r+'(红十字点)'bo'(蓝色圆点)

plt.plot( )函数会尝试将接收到的数据绘制成有意义的图形,而plt.show( )打开matplotlib查看器并显示绘制的图形

观察得知,plt.plot( )将接收到的数据从04一一映射,并连线绘制成折线统计图

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)

④图表中xy轴的分度值被称为标签plt.tick_params( )首先要求参数axisaxis的选项有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)

ssize

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参数的不同?

较为简单,直接将上述的xy值的类型从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存在,所以可变参数的传入需以listtuple的形式。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'(轮廓与图形颜色一致)

经测试,参数名为edgecoloredgecolors等效;默认不为黑色轮廓,应该为'face'

【自定义颜色】

plt.scatter(x , y , c = None , ... , **kwargs)

ccolor

通过scatter( )绘制的点默认为蓝色,可传递参数c来更改

参数c可为表示特定颜色的字符串,如'red',也可通过RGB来设置

注意,与普通的255*255*255RGB不同,参数c应设置为30-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)

figfigure

fnamefile name

bboxbounding 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_valuesy_values分别存储点的横坐标和纵坐标的值,并规定一开始从(0 , 0)点开始。通过choice( )分别为xy选择方向(direction)、距离(distance),明确下一个点要做出的漫步

if x_step == 0 and y_step == 0: continue代码行表明我们不接受原地漫步

最后通过x_stepy_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为一个包含04999的列表,其作用在参数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像素/英寸,因此若指定大小的图表尺寸不合适,可使用形参dpifigure( )传递自己系统的分辨率:

plt.figure(dpi = 96 , figsize = (10 , 6))

DPI的含义为每英寸像素点,当传递的形参dpi过小,会出现图表显示过小的情况:

 

【我怎么觉得它更细致了??】

'''''''

 

posted on 2018-10-21 19:49  刻意 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/I-am-not-happy/p/9826444.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据的原理是使用matplotlib这个Python库来创建图表和可效果。matplotlib库中最常用的模块是pyplot,它提供了一系列函数来创建、定制和展示图表。[1] 在使用matplotlib进行数据时,首先需要导入matplotlib.pyplot模块。然后,可以使用plot函数来创建图表,传入x和y的数据作为参数。接下来,使用show函数来显示图表。 Matplotlib数据分析三剑客中的一员,它可以与NumPy和Pandas一起使用,帮助我们更好地理解和分析数据。通过绘制饼图、柱状图、条形图等不同类型的图表,可以直观地展示数据分析的结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python之数据——matplotlib系统介绍(一)](https://blog.csdn.net/OuKman/article/details/108815083)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Matplotlib 数据分析可](https://download.csdn.net/download/weixin_26876073/19667161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值