随机漫步这个例子出自《Python编程:从入门到实践》
创建RandomWalk()类
包含__init__()和fill_walk()
random_walk.py
from random import choice class RandomWalk(): """一个生成随机漫步数据的类""" def __init__(self, num_points=5000): """初始化随机漫步的属性""" self.num_points = num_points #所有随机漫步都始于(0,0) self.x_values = [0] self.y_values = [0] def fill_walk(self): """计算随机漫步包含的所有点""" #不断漫步,直到列表达到指定的长度 while len(self.x_values) < self.num_points: #决定前进方向以及沿这个方向前进的距离 x_direction = choice([1, -1]) x_distance = choice([0, 1, 2, 3, 4]) x_step = x_direction * x_distance y_direction = choice([1, -1]) y_distance = choice([0, 1, 2, 3, 4]) y_step = y_direction * y_distance #拒绝原地踏步 if x_step == 0 and y_step == 0: continue #计算下一个点的x和y值 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)
绘制随机漫步图
rw_visual.py
import matplotlib.pyplot as plt from random_walk import RandomWalk #构建一个RandomWalk实例,并将其包含的点都绘制出来 rw = RandomWalk() rw.fill_walk() plt.scatter(rw.x_values, rw.y_values, s=1) plt.show()
每次都不一样,如果想找它的先后顺序,我们就要给它上色
给点着色
cmap再次出场
关键语句
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolor=None, s=15)
随着c的变化,颜色会渐变,艺术品的感jio
全部代码
import matplotlib.pyplot as plt from random_walk import RandomWalk while True: #构建一个RandomWalk实例,并将其包含的点都绘制出来 rw = RandomWalk() rw.fill_walk() point_numbers = list(range(rw.num_points)) plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolor=None, s=15) plt.show() keep_running = input("Make another walk?(y/n):")#多画几次 if keep_running == 'n': break
换色吧,cmap=plt.cm.YlOrBr,应该还有很多好看的哈哈哈
什么?你还想知道起点和终点?
绘制起点和终点
起点(0,0)用绿色,终点用红色,而且比较大(s=100)
关键语句
#突出起点和终点 plt.scatter(0, 0, c='green', edgecolor=None, s=100) plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolor=None, s=100)
全部代码

import matplotlib.pyplot as plt from random_walk import RandomWalk while True: #构建一个RandomWalk实例,并将其包含的点都绘制出来 rw = RandomWalk() rw.fill_walk() point_numbers = list(range(rw.num_points)) plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolor=None, s=15) #突出起点和终点 plt.scatter(0, 0, c='green', edgecolor=None, s=100) plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolor=None, s=100) plt.show() keep_running = input("Make another walk?(y/n):") if keep_running == 'n': break
一目了然
隐藏坐标轴
关键语句
#隐藏坐标轴 plt.axes().get_xaxis().set_visible(False) plt.axes().get_yaxis().set_visible(False)
全部代码

import matplotlib.pyplot as plt from random_walk import RandomWalk while True: #构建一个RandomWalk实例,并将其包含的点都绘制出来 rw = RandomWalk() rw.fill_walk() point_numbers = list(range(rw.num_points)) plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolor=None, s=15) #突出起点和终点 plt.scatter(0, 0, c='green', edgecolor=None, s=100) plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolor=None, 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
增加点数
创建实例时,给它一个较大的num_points
关键语句
rw = RandomWalk(50000)
全部代码

import matplotlib.pyplot as plt from random_walk import RandomWalk while True: #构建一个RandomWalk实例,并将其包含的点都绘制出来 rw = RandomWalk(50000) rw.fill_walk() point_numbers = list(range(rw.num_points)) plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolor=None, s=1) #突出起点和终点 plt.scatter(0, 0, c='green', edgecolor=None, s=100) plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolor=None, 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
调整尺寸以适应屏幕
在fill_walk()后插入关键语句
#设置绘图窗口的尺寸 plt.figure(figsize=(10, 6))
这里第一次提到figure(),用于指定图表的宽度、高度、分辨率和背景色。你需要给形参figsize指定一个元组,向matplotlib指出绘图窗口的尺寸,单位为英寸。
Python假定屏幕分辨率为80像素/英寸。如果你知道自己的系统的分辨率,可使用形参dpi向figure()传递该分辨率,以有效地利用可用的屏幕空间,如下所示:
plt.figure(dpi=128, figsize=(10, 6))
2020-03-04