AI智能
改变未来

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 pltsquares = [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 pltsquares = [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。结果如图所示:

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Python学习之路日志—利用matplotlib开发数据可视化项目(1)