15 生成数据

15.1 安装Matplotlib

15.2绘制简单的折线图

模块pyplot包含很多用于生成图表的函数

subplot()可在一张图片中绘制一个或者多个图标

import matplotlib.pyplot as plt
squares = [1, 4, 9, 16, 25]
fig, ax = plt.subplots()
ax.plot(squares)
plt.show()

15.2.1修改标签文字和线条粗细

import matplotlib.pyplot as plt
squares = [1, 4, 9, 16, 25]
fig, ax = plt.subplots()
ax.plot(squares, linewidth=3)
ax.set_title('平方数', fontsize=24)
ax.set_xlabel("值", fontsize=14)
ax.set_ylabel("值", fontsize=14)
ax.tick_params(axis="both", labelsize=14)
plt.show()

15.2.2校正图形

import matplotlib.pyplot as plt
input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
fig, ax = plt.subplots()
ax.plot(input_values, squares, linewidth=3)     向plot()同时提供输入值与输出值
ax.set_title('平方数', fontsize=24)
ax.set_xlabel("值", fontsize=14)
ax.set_ylabel("值", fontsize=14)
ax.tick_params(axis="both", labelsize=14)
plt.show()

15.2.3使用内置样式

plt.style.use("seaborn")   

15.2.4使用scatter()绘制散点图并设置样式

要绘制一个点,可使用方法scatter()。它将在指定位置绘制一个点

import matplotlib.pyplot as plt
plt.style.use("seaborn-ticks")
fig, ax = plt.subplots()
ax.scatter(2,4)
plt.show()
import matplotlib.pyplot as plt
plt.style.use("seaborn-ticks")
fig, ax = plt.subplots()
ax.scatter(2, 4, s=200)    设置绘制图形时使用的点的尺寸
ax.set_title('平方数', fontsize=24)
ax.set_xlabel("值", fontsize=14)
ax.set_ylabel("值", fontsize=14)

plt.show()

15.2.5使用scatter()绘制一系列点

import matplotlib.pyplot as plt
plt.style.use("seaborn-ticks")
x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]
fig, ax = plt.subplots()
ax.scatter(x_values, y_values, s=200)
ax.set_title('平方数', fontsize=24)
ax.set_xlabel("值", fontsize=14)
ax.set_ylabel("值", fontsize=14)
plt.show()

15.2.6自动计算数据

我们不必手工计算包含点的列表,可以用python循环来完成。

x_values = range(1, 1001)
y_values = [x*x for x in x_values]
fig, ax = plt.subplots()

ax.axis([0,1100, 0,1100000])这个函数包含四个参数,分别为x与y坐标轴的最小值与最大值。

15.2.7自定义颜色

ax.scatter(x_values, y_values, c="red", s=10)  颜色c也可用RGB来表示

15.2.8使用颜色映射

颜色映射时一系列颜色,从起始颜色渐变到结束颜色。可用于突出数据的规律。

ax.scatter(x_values, y_values, c=y_values,cmap=plt.cm.Blues, s=10)

15.2.9自动保存图表

要让程序自动将图表保存到文件中,可将调用plt.show()替换为plt.savefig()

15.3随机漫步

随机漫步是这样行走得到的路径:每次行走都是完全随机的,没有明确的方向,结果是由一系列随机决策决定的。

15.3.1创建RandomWalk类

class RandomWalk:
    def __init__(self, num_points=5000):
        self.num_points = num_points
        self.x_values = 0
        self.y_values = 0

15.3.2选择方向

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_distance * x_distance
        y_direction = choice([1, -1])
        y_distance = choice([1, 2, 3, 4, 5])
        y_step = y_direction * y_distance
        if x_step == 0 and y_step == 0:
            continue
        x =self.x_values[-1] + x_step
        y =self.y_values[-1] + y_step
        self.x_values.append(x)
        self.y_values.append(y)

15.3.3绘制随机漫步图

import matplotlib.pyplot as plt
from random_walk import RandomWalk
rw = RandomWalk()
rw.fill_walk()
plt.style.use("classic")
fig, ax = plt.subplots()
ax.scatter(rw.x_values, rw.y_values, s=15)
plt.show()

15.3.4模拟多次随机漫步

while True:
    rw = RandomWalk()
    rw.fill_walk()
    plt.style.use("classic")
    fig, ax = plt.subplots()
    ax.scatter(rw.x_values, rw.y_values, s=15)
    plt.show()
    keep_running = input("Make another walk?(y/n)")
    if keep_running == "n":
        break

15.3.5设置随机漫步图的样式

1.给点着色

ax.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolors="none", s=15)

2.重新绘制起点和终点

ax.scatter(0, 0, c="green", edgecolor="none", s=100)
ax.scatter(rw.x_values[-1], rw.y_values[-1], c="red", edgecolor="none", s=100)

3.隐藏坐标轴

ax.get_xaxis().set_visible(False)
ax.get_xaxis().set_visible(False)

4.增加点数

rw = RandomWalk(50000)

5.调整尺寸以合适的屏幕

fig, ax = plt.subplots(figsize=(15,9))

15.4使用Plotly模拟掷骰子

15.4.1安装Plotly

15.4.2创建Die类

from random import randint
class Die:
    def __init__(self, num_sides=6):    #骰子的默认面数
        self.num_sides = num_sides
    def roll(self):
        return randint(1, self.num_sides)     #返回一个在1与面数之间的随机数

15.4.3掷骰子

from die import  Die
die = Die()
results = []
for roll in range(100):
    result = die.roll()
    results.append(result)
print(results)

15.4.4分析结果

for value in range(1, die.num_sides+1):
    frequency = results.count(value)
    frequencies.append(frequency)
print(frequencies)

统计每个点出现的个数

15.4.5绘制直方图

hist = pygal.Bar()
hist.title = "Results of rolling one D6 1000 times."
hist.x_labels = ["1", "2", "3", "4", "5", "6"]
hist.x_title = "Result"
hist.y_title = "Frequency of Result"
hist.add("D6", frequencies)
hist.render_to_file("die_visual.svg")

15.4.6同时掷两个骰子

同时掷两个筛子时,得到的点数更多,结果分布情况也不相同。

import pygal as pygal

from die import Die
die1 = Die()
die2 = Die()
results = []
for roll in range(10000):
    result = die1.roll() + die2.roll()
    results.append(result)
# 分析结果
frequencies = []
max_result = die1.num_sides + die2.num_sides

for value in range(2, max_result+1):
    frequency = results.count(value)
    frequencies.append(frequency)
print(frequencies)
hist = pygal.Bar()
hist.title = "Results of rolling two D6 1000 times."
hist.x_labels = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
hist.x_title = "Result"
hist.y_title = "Frequency of Result"
hist.add("D6+D6", frequencies)
hist.render_to_file("dice_visual.svg")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值