您的位置:首页 > 编程语言 > Python开发

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

2020-08-30 00:30 1016 查看

在学习完了《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。结果如图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: