Python学习之路日志—利用matplotlib开发数据可视化项目(1)

在学习完了《Python编程:从入门到实践》的第一个项目“外星人入侵”后,我来到了第二个项目:“数据可视化”,而这个项目我将在Mac OS X系统中用Sublime Text来完成。

1.1 安装matplotlib:

Apple的标准Python安装自带了matplotlib。要检查系统是否安装了matplotlib,可打开一个终端会话并尝试导入matplotlib,如下图所示:

在这里插入图片描述
如果没有出现任何错误消息,就说明系统已经安装了matplotlib。


1.2 绘制简单的散点图:

下面来使用matplotlib绘制一个简单的折线图,再对其进行定制,以实现信息更丰富的数据可视化。我们将使用平方数序列1、4、9、16和25来绘制这个图表。 只需向matplotlib提供如下数字,matplotlib就能完成其他的工作:

import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25]
plt.plot(squares)
plt.show()

我们首先导入了模块pyplot ,并给它指定了别名"plt" ,以免反复输入。模块pyplot 包含很多用于生成图表的函数。 我们创建了一个列表,在其中存储了前述平方数,再将这个列表传递给函数plot() ,这个函数尝试根据这些数字绘制出有意义的图形。plt.show() 打开matplotlib查看器,并显示绘制的图形,如下图所示。查看器让你能够缩放和导航图形,另外,单击磁盘图标可将图形保存起来:

在这里插入图片描述
上图所示的图形表明数字是越来越大的,但标签文字太小,线条太细。但matplotlib能够调整可视化的各个方面。下面通过一些定制来改善这个图形的可读性,如下所示:

# -*- coding:utf-8 -*-

import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25]
plt.plot(squares, linewidth=5)

#设置图表标题,并给坐标轴加上标签及字体大小
plt.title('Square number',fontsize = 25)
plt.xlabel('Value',fontsize = 25)
plt.ylabel('Square of value',fontsize = 15)

#设置刻度标记的大小
plt.tick_params(axis='both',labelsize = 15)

plt.show()

参数linewidth (见第5行)决定了plot() 绘制的线条的粗细。

函数title() (见第8行)给图表指定标题。

在上述代码中,出现了多次的参数fontsize 指定了图表中文字的大小

函数xlabel()ylabel() 让你能够为每条轴设置标题(见第9-10行)。

而函数tick_params() 设置刻度的样式(见第13行),其中指定的实参将影响x轴和y轴上的刻度 (axes='both' ),并将刻度标记的字号设置为14(labelsize=15 )。

最终的图表如下图所示:

在这里插入图片描述
图形更容易阅读后,我们发现这张图没有正确地绘制数据。下面来修复这个问题。 当向plot() 提供一系列数字时,它假设第一个数据点对应的 x 坐标值为0,但实际上我们的第一个点对应的 x 值为1。为改变这种默认行为,我们可以如下图所示给plot() 同时提供输入值和输出值:

在这里插入图片描述
现在plot() 将正确地绘制数据,因为我们同时提供了输入值和输出值,它无需对输出值的生成方式作出假设。最终的图形是正确的,如下图所示:

在这里插入图片描述


1.3 使用scatter()绘制散点图并设置其样式:

有时候,需要绘制散点图并设置各个数据点的样式。要绘制单个点,可使用函数scatter() ,并向它传递一对 x 和 y 坐标,它将在指定位置绘制一个点:

在这里插入图片描述

在第4行处,我们调用了scatter() ,并使用实参s 设置了绘制图形时使用的点的尺寸。如果此时运行scatter_squares.py,将在图表中央看到一个点,如下图所示:

在这里插入图片描述
要绘制一系列的点,可向scatter() 传递两个分别包含 x 值和 y 值的列表,如下所示:

在这里插入图片描述
列表x_values 包含要计算其平方值的数字,而列表y_values 包含前述每个数字的平方值。将这些列表传递给scatter()。最终的结果如图所示:

在这里插入图片描述
此外,我们可以不必手工计算包含点坐标的列表,而让Python循环来替我们完成这种计算。下面是让程序自动绘制1000个点的代码:

在这里插入图片描述
我们首先创建了一个包含 x 值的列表,其中包含数字1~1001(见第5行)。接下来是一个生成 y 值的列表解析,它遍历 x 值(for x in x_values ),计算其平方值(x**2 ), 并将结果存储到列表y_values 中。

然后,将输入列表和输出列表传递给scatter() (见第7行)。 由于这个数据集较大,需要将点设置得较小,并使用函数axis() 指定了每个坐标轴的取值范围(见第15行)。函数axis() 要求提供四个值:x 和 y 坐标轴的最小值和最大值。在这里,我们将 x 坐标轴的取值范围设置为1~1001,并将 y 坐标轴的取值范围设置为1~1000000。结果如图所示:

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值