内容简介:Python提供了很多模块用于数据可视化,其中有matplotlib、pygal。我参考网上热门书籍《Python编程从入门到实战》,在测试与学习过程中遇到的些许问题加以解决,才写下这一项目实战的心得,对于Python基础部分就不细讲,主要是项目核心要点和解决方案的描述。本小节先讲述pyplot模块的基本使用。针对新手,真心觉得不要直接使用Python下载来的IDLE来开发,因为功能太少了,也不好使用。我的建议是对于Python初学者,先安装Anaconda,这是一个基于Python的数据处理和科学计算平
前沿
Python提供了很多模块用于数据可视化,其中有matplotlib、pygal。我参考网上热门书籍《Python编程从入门到实战》,在测试与学习过程中遇到的些许问题加以解决,才写下这一项目实战的心得,对于 Python 基础部分就不细讲,主要是项目核心要点和解决方案的描述。本小节先讲述pyplot模块的基本使用。
新手的建议
针对新手,真心觉得不要直接使用Python下载来的IDLE来开发,因为功能太少了,也不好使用。我的建议是对于Python初学者,先安装Anaconda,这是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库,我们装上Anaconda,就相当于把数十个第三方模块自动安装好了,非常简单易用,在安装界面添加Anaconda到PATH环境变量中勾上,这样就会自动添加环境变量了。Anaconda 自带了一个编辑器-Spyder,可以使用Spyder编写代码,知道有这个编辑器就好。然后再安装一个PyCharm,它是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。
Anaconda和PyCharm安装过程和方法文档链接,我是摘抄网上有用的资料再总结出来的:链接: https://pan.baidu.com/s/10KcfLLvI9omIRSJ6JMK9Uw 密码:cgf8
利用pyplot模块的plot函数绘制折线图
我们先导入模块pyplot,然后使用该模块的plot函数来绘制折线图,接着调用该模块的相关函数来调整、设置图表的标题、横纵标签、刻度标记内容或大小。注意, pyplot模块的plot函数可以接收输入参数和输出参数,还有线条粗细等参数,但是若plot函数只指定输出参数(列表),那么输入参数默认由0开始。
(1)plot函数指定输出参数(1,2,3,4,5的平方数列表)
import matplotlib.pyplot as plt
# pyplot模块的plot函数可以接收输入参数和输出参数,还有线条粗细等参数,,例如下方的示例
squares = [1, 4, 9, 16, 25]
plt.plot(squares, linewidth=5) # 这里只指定了一个列表,那么就当作是输出参数,输入参数从0开始,就会发现没有正确绘制数据
plt.title("Square Numbers", fontsize=24) # 指定标题,并设置标题字体大小
plt.xlabel("Value", fontsize=14) # 指定X坐标轴的标签,并设置标签字体大小
plt.ylabel("Square of Value", fontsize=14) # 指定Y坐标轴的标签,并设置标签字体大小
plt.tick_params(axis='both', labelsize=14) # 参数axis值为both,代表要设置横纵的刻度标记,标记大小为14
plt.show() # 打开matplotlib查看器,并显示绘制的图形
运行结果如下:
(2)plot函数指定输入参数和输出参数
我们知道,上面并没有按照我们的意愿来绘制图形,Y轴指定为[1,4,9,16,25],上面采用默认输入参数处理X轴变成[0,1,2,3,4]。X轴应该对应值为[1,2,3,4,5]才是我们的目的,所以我们必须同时指定输入参数和输出参数才行。观察运行结果图的X轴变化了。
import matplotlib.pyplot as plt
# 我也可以指定输入参数和输出参数,这样就能按照我的意愿绘制图形了
input_values = [1, 2, 3, 4, 5] # 指定输入参数
squares = [1, 4, 9, 16, 25] # 指定输出参数
plt.plot(input_values, squares, linewidth=5) # 调用绘制函数,传入输入参数和输出参数
plt.title("Square Numbers", fontsize=24) # 指定标题,并设置标题字体大小
plt.xlabel("Value", fontsize=14) # 指定X坐标轴的标签,并设置标签字体大小
plt.ylabel("Square of Value", fontsize=14) # 指定Y坐标轴的标签,并设置标签字体大小
plt.tick_params(axis='both', labelsize=14) # 参数axis值为both,代表要设置横纵的刻度标记,标记大小为14
plt.show() # 打开matplotlib查看器,并显示绘制的图形
运行结果如下:
利用pyplot模块的scatter函数绘制散点图
绘制散点图只不过是绘制函数不同,从上面的plot变为scatter,其他设置标题、横纵标签等的方式一样。
(1)scatter函数绘制单个点
import matplotlib.pyplot as plt
plt.scatter(2, 4, s=200) # 传递一对x和y坐标。它将在指定位置绘制一个点,参数s是设置绘制图形时使用的点的尺寸
plt.title("Square Numbers", fontsize=24) # 指定标题,并设置标题字体大小
plt.xlabel("Value", fontsize=14) # 指定X坐标轴的标签,并设置标签字体大小
plt.ylabel("Square of Value", fontsize=14) # 指定Y坐标轴的标签,并设置标签字体大小
plt.tick_params(axis='both', labelsize=14) # 参数axis值为both,代表要设置横纵的刻度标记,标记大小为14
plt.show() # 打开matplotlib查看器,并显示绘制的图形
运行结果如下:
(2)scatter函数绘制一系列点
import matplotlib.pyplot as plt
x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]
plt.scatter(x_values, y_values, s=100) # 传入两个列表,列表x_values的元素作为x坐标,列表y_values的元素作为y坐标,两个组合成一个点的坐标,所以一共有5个点
plt.title("Square Numbers", fontsize=24) # 指定标题,并设置标题字体大小
plt.xlabel("Value", fontsize=14) # 指定X坐标轴的标签,并设置标签字体大小
plt.ylabel("Square of Value", fontsize=14) # 指定Y坐标轴的标签,并设置标签字体大小
plt.tick_params(axis='both', labelsize=14) # 参数axis值为both,代表要设置横纵的刻度标记,标记大小为14
plt.show() # 打开matplotlib查看器,并显示绘制的图形
运行结果如下:
(3)自动计算Y轴的数据
前面个两个实例挺简单,但也只是我们自己定义的短列表,如果要绘制的点有很多,那么还手动写当然不实际,所以我们写一个根据我们指定的X轴的数据,自动计算Y轴的数据就省事很多了。
import matplotlib.pyplot as plt
x_values = list(range(1, 1001)) # 我们是利用range函数生成一个从1到1000的可迭代对象(不包括1001),然后强制转换为列表
y_values = [x ** 2 for x in x_values] # 这个语法是列表推导式,将x_values每个元素的值进行平方再逐一放入列表,最后这个列表推导式返回整个列表
plt.scatter(x_values, y_values, s=40) # 在2.0.0版本后的matplotlib中,scatter()函数的实参edgecolor(数据点的轮廓)默认为'none',则删除轮廓。
plt.title("Square Numbers", fontsize=24) # 指定标题,并设置标题字体大小
plt.xlabel("Value", fontsize=14) # 指定X坐标轴的标签,并设置标签字体大小
plt.ylabel("Square of Value", fontsize=14) # 指定Y坐标轴的标签,并设置标签字体大小
plt.axis([0, 1100, 0, 1100000]) # 设置每个坐标轴的取值范围。其实最右侧就是1100,但是没有显示标签而已
plt.show() # 打开matplotlib查看器,并显示绘制的图形
运行结果如下:
注意, 在2.0.0版本后的matplotlib中scatter()函数的实参edgecolor(数据点的轮廓)不写则默认为'none',代表删除轮廓。也可以通过以下修改代码:
plt.scatter(x_values, y_values, s=40, edgecolor='red')
上述修改后的代码指定数据点轮廓的颜色为红色,由于默认点的颜色为蓝色,所以你将会看到下面这样,只有右上角是蓝色,其他都是红色,这是因为绘制很多点,红色轮廓都粘连在一起了,所以看不出来。
修改代码后运行结果如下:
上面说了默认数据点的颜色为蓝色,我们也可以通过参数c修改数据点的颜色,至于颜色值可以采用直接写颜色英文如'red'、'black'等,或者使用RGB颜色模式自定义颜色,这个自定义颜色设置为一个元组,其中包含三个0~1之间的小数值,它们分别表示红色、绿色和蓝色分量,如(0,0,0.8)。可以通过下面这样修改代码:
import matplotlib.pyplot as plt
x_values = list(range(1, 1001))
y_values = [x ** 2 for x in x_values]
plt.scatter(x_values, y_values, c=(0, 0.8, 0), s=40) # 指定了c参数,使用的是RGB颜色值方式
plt.title("Square Numbers", fontsize=24) # 指定标题,并设置标题字体大小
plt.xlabel("Value", fontsize=14) # 指定X坐标轴的标签,并设置标签字体大小
plt.ylabel("Square of Value", fontsize=14) # 指定Y坐标轴的标签,并设置标签字体大小
plt.axis([0, 1100, 0, 1100000]) # 设置每个坐标轴的取值范围。其实最右侧就是1100,但是没有显示标签而已
plt.show() # 打开matplotlib查看器,并显示绘制的图形
运行结果如下:
(4)使用颜色映射和自动保存图表
照书上P294页的使用颜色映射小节的描述对于初学者可能有点模棱两可,这里采用我自己的代码来理解什么是颜色映射,原理是什么。
测试代码如下:
import matplotlib.pyplot as plt
x_values = [1, 2, 3, 4, 5] # 含x值的列表
y_values = [1, 4, 2, 6, 5] # 含y值的列表
# 我们知道根据上面两个列表,我们调用scatter可以绘制一系列的点
# 模块pyplot内置了一组颜色映射,通过设置c参数为y列表的值(这个y列表的是[1,2,3,4,5])然后利用参数cmap根据y列表的大小映射到由x_values和y_values组成的五个点从浅到深的颜色,可以看出y列表[1,2,3,4,5]分别映射到(1,1),(2,4),(3,2),(4,6),(5,5)五个点,其中(1,1)点颜色最浅,(5,5)点颜色最深。
plt.scatter(x_values, y_values, c=[1, 2, 3, 4, 5], cmap=plt.cm.Blues, s=100)
plt.title("Square Numbers", fontsize=24) # 指定标题,并设置标题字体大小
plt.xlabel("Value", fontsize=14) # 指定X坐标轴的标签,并设置标签字体大小
plt.ylabel("Square of Value", fontsize=14) # 指定Y坐标轴的标签,并设置标签字体大小
plt.savefig("3.png", bbox_inches='tight') # 打开matplotlib查看器,并显示绘制的图形
# 值的注意的是,要让程序自动将图表保存到文件中,可将对plt.show()的调用替换为对plt.savefig()的调用。
# 如果指定了bbox_inches='tight'将图表多余的空白区域裁剪掉,明显更符合用户需求,如果没指定,生成的图片显示不出Y轴的标签。
运行结果如下(需要注意,其实(1,1)点的位置还有一个非常浅蓝色的点,只是浅到看不到而已):
如果还不理解,那么你就修改以下测试代码来运行观察:
plt.scatter(x_values, y_values, c=[1, 5, 3, 4, 5], cmap=plt.cm.Blues, s=100)
运行结果如下(可以发现(2,4)点的颜色也变成深蓝色了哦):
有了上面的理解基础,我们可以修改为书本源代码,来观察一下蓝色彗星的残影,哈哈O(∩_∩)O
书本源代码:
import matplotlib.pyplot as plt
x_values = list(range(1,1001)) # 含x值的列表
y_values = [x ** 2 for x in x_values] # 含y值的列表
# 我们知道根据上面两个列表,我们调用scatter可以绘制一系列的点
# 根据y列表的值大小进行颜色映射的,值大的颜色深,值小的颜色浅。如果y列表的值按顺序,并且映射到按顺序的点,那么自然颜色也是从浅到深。
# 模块pyplot内置了一组颜色映射,通过设置c参数为y列表的值(这个y列表的是[1,2,3,4,5])然后利用参数cmap根据y列表的大小映射到由x_values和y_values组成的五个点从浅到深的颜色,可以看出y列表[1,2,3,4,5]分别映射到(1,1),(2,4),(3,2),(4,6),(5,5)五个点,其中(1,1)点颜色最浅,(5,5)点颜色最深。
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, s=40)
plt.title("Square Numbers", fontsize=24) # 指定标题,并设置标题字体大小
plt.xlabel("Value", fontsize=14) # 指定X坐标轴的标签,并设置标签字体大小
plt.ylabel("Square of Value", fontsize=14) # 指定Y坐标轴的标签,并设置标签字体大小
plt.savefig("3.png", bbox_inches='tight') # 打开matplotlib查看器,并显示绘制的图形
运行结果图如下(蓝色彗星残影):
利用pyplot模块的scatter函数绘制随机漫步图
套用书本原话来说, 随机漫步:每次行走都完全是随机的,没有明确的方向,结果是由一系列随机决策决定的。
为了实现随机漫步,需要做以下几步就可以完成:
1.创建RandomWalk类来生成随机漫步数据
2.利用获取的随机漫步数据绘制随机漫步图
3.模拟多次随机漫步
4.设置随机漫步图的样式
(1)创建RandomWalk类来生成随机漫步数据
在项目里创建一个random_walk.py文件,该文件代码如下:
from random import choice
# 一个生成随机漫步数据的类
class RandomWalk:
# 默认为5000个点,代表5000步
def __init__(self, num_points=5000):
self.num_points = num_points
self.x_values = [0]
self.y_values = [0]
# 获取随机方向和步数的乘积
def get_step(self):
return choice([1, -1]) * choice([0, 1, 2, 3, 4])
def fill_walk(self):
while len(self.x_values) < self.num_points:
# 获取往哪个方向走几步
x_step = self.get_step()
y_step = self.get_step()
# 如果原地踏步则continue处理
if x_step == 0 and y_step == 0:
continue
# 计算下一步走的位置
next_x = self.x_values[-1] + x_step
next_y = self.y_values[-1] + y_step
# 将下一次走的位置保存在列表中
self.x_values.append(next_x)
self.y_values.append(next_y)
(2)利用获取的随机漫步数据绘制随机漫步图
在项目里创建一个rw_visual.py文件,该文件代码如下:
import matplotlib.pyplot as plt from random_walk import RandomWalk # 创建一个RandomWalk实例,并指定走5000步 rw = RandomWalk(5000) rw.fill_walk() # 开始获取随机漫步数据,其实获取的是两个包含x和y值的数据点列表 plt.scatter(rw.x_values, rw.y_values, s=15) plt.show()
运行结果如下:
(3)模拟多次随机漫步
在rw_visual.py文件代码上加以修改,修改代码如下:
import matplotlib.pyplot as plt
from random_walk import RandomWalk
while True:
rw = RandomWalk(5000)
rw.fill_walk()
plt.scatter(rw.x_values, rw.y_values,s=15)
plt.show()
keep_running = input("Make another walk?(y/n):")
if keep_running == 'n':
break
运行结果如下(你点击右上角关闭按钮,在PyCharm下方会弹出询问是否继续漫步):
(4)设置随机漫步图的样式
我们将设置随机漫步图的样式,定制一个好看的随机漫步图,有给点着色、重新绘制起点和终点、隐藏坐标轴、调整尺寸以适合屏幕。
import matplotlib.pyplot as plt
from random_walk import RandomWalk
while True:
rw = RandomWalk(5000)
rw.fill_walk()
plt.figure(figsize=(20, 6))
# 颜色映射就是用列表赋值给c,而这个列表的值可以随意,大的代表颜色深,小的代表颜色浅。
point_number = list(range(rw.num_points)) # [0-4999]
plt.scatter(rw.x_values, rw.y_values, c=point_number, cmap=plt.cm.Blues, s=4)
# 突出起点和终点,点变大,用不同颜色来显示起点和终点
plt.scatter(0, 0, c='green', s=100)
plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', s=100)
# 隐藏坐标轴
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
plt.show()
keep_running = input("Make another walk?(y/n):")
if keep_running == 'n':
break
运行结果如下:
以上所述就是小编给大家介绍的《谈谈Python实战数据可视化之pyplot模块》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 谈谈Python实战数据可视化之matplotlib模块(实战篇)
- 想做大数据可视化?来看腾讯高手的实战案例!
- 谈谈Python实战数据可视化之pygal模块(基础篇)
- 图数据库JanusGraph实战[5]:JanusGraph可视化之Gephi
- Elastic Stack 实战学习教程:日志数据的收集、分析与可视化
- Python基础算法库Numpy及可视化库使用实践-大数据ML样本集案例实战
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning Google Maps API 3
Gabriel Svennerberg / Apress / 2010-07-27 / $39.99
This book is about the next generation of the Google Maps API. It will provide the reader with the skills and knowledge necessary to incorporate Google Maps v3 on web pages in both desktop and mobile ......一起来看看 《Beginning Google Maps API 3》 这本书的介绍吧!