数据可视化

1绘制折线图

2绘制散点图

3可绘制数据类型

4随机游走

5模拟骰子

安装 Matplotlib

pip install matplotlib

Python从入门到实践project数据可视化_数据可视化

绘制折线图

import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25]
fig, ax = plt.subplots()
ax.plot(squares)

plt.show()
添加横纵坐标及图标样式
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块记作plt

# print(plt.style.available)可以看绘制图标类型
input_values = [1, 2, 3, 4, 5]  # 不设置横坐标,默认为0,1,2,3,4
squares = [1, 4, 9, 16, 25]  # 列表纵坐标
plt.style.use('seaborn')  # 设置图标样式
fig, ax = plt.subplots()  # subplots绘制一个或多个图表
# fig图形对象 ax轴对象
ax.plot(input_values, squares, linewidth=3)   # 传入横坐标纵坐标linewidth设置折现宽度
# 设置图题并给坐标轴加上标签
ax.set_title("Square Numbers", fontsize=24)   # fontsize字号大小
ax.set_xlabel("Value", fontsize=14)
ax.set_ylabel("Square of Value", fontsize=14)
# 设置刻度标记的样式
ax.tick_params(labelsize=14)  # 设置刻度数字字号
# 将数据传入
plt.show()   # 展示图表,图标横坐标是列表索引(0,1,2,3,4)

绘制散点图

绘制单点
import matplotlib.pyplot as plt

plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.scatter(2, 4)

plt.show()
设置坐标轴的范围
# 设置每个坐标轴的取值范围
ax.axis([0, 1100, 0, 1_100_000])
#  x轴从0到1100 y轴从0到1100000
# 数据太大图标会默认设置科学计数法
ax.ticklabel_format(style='plain')  # 用最简单样式展示数字,不用科学计数法
导入颜色

单一颜色

ax.scatter(x_values, y_values, color='red', s=10)

可绘制的列表类型

print(plt.style.available)

['Solarize_Light2', '_classic_test_patch', '_mpl-gallery',
'_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background',
'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-v0_8',
'seaborn-v0_8-bright', 'seaborn-v0_8-colorblind',
'seaborn-v0_8-dark', 'seaborn-v0_8-dark-palette',
'seaborn-v0_8-darkgrid', 'seaborn-v0_8-deep', 'seaborn-v0_8-muted',
'seaborn-v0_8-notebook', 'seaborn-v0_8-paper',
'seaborn-v0_8-pastel', 'seaborn-v0_8-poster',
'seaborn-v0_8-talk', 'seaborn-v0_8-ticks', 'seaborn-v0_8-white',
'seaborn-v0_8-whitegrid', 'tableau-colorblind10']
绘制颜色映射,随着数字变大颜色变深
ax.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, s=10)
#  cmap=plt.cm.Blues颜色映射蓝色 c=y_values传入y轴数据用于颜色映射

Python从入门到实践project数据可视化_随机游走_02

保存图像
plt.savefig('squares_plot.png', bbox_inches='tight')  # 保存图像
#  bbox_inches是否把空白区域裁剪掉

Python从入门到实践project数据可视化_ide_03

随机游⾛

创建游走的类randon_walk.py
from random import choice  # random可以进行随机决策

class RandomWalk:
    """⼀个⽣成随机游⾛数据的类"""
    def __init__(self, num_points=5000):  # 随机生成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])  # 前进方向:随机生成1或-1
            x_distance = choice([0, 1, 2, 3, 4])  # 前进距离:每次前进1-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:  # 如果x,y变化为0不把该点加入进去
                continue

            # 计算下⼀个点的 x 坐标值和 y 坐标值
            x = self.x_values[-1] + x_step
            y = self.y_values[-1] + y_step

            self.x_values.append(x)  # 将新点添加进图像
            self.y_values.append(y)
方法调用
import matplotlib.pyplot as plt
from random_walk import RandomWalk


# 创建⼀个 RandomWalk 实例
rw = RandomWalk()  # 创建实例
rw.fill_walk()  # 调用方法

# 将所有的点都绘制出来
plt.style.use('classic')  # 图像样式经典
fig, ax = plt.subplots()  # 绘制图像跟轴
ax.scatter(rw.x_values, rw.y_values, s=15)  # 绘制散点图
ax.set_aspect('equal')  # x,y间距相等
plt.show()

Python从入门到实践project数据可视化_数据可视化_04

Python从入门到实践project数据可视化_数据可视化_05

可以写进while循环一直生成
import matplotlib.pyplot as plt
from random_walk import RandomWalk

# 只要程序处于活动状态,就不断地模拟随机游⾛
while True:
    # 创建⼀个 RandomWalk 实例
    rw = RandomWalk()  # 创建实例
    rw.fill_walk()  # 调用方法

    # 将所有的点都绘制出来
    plt.style.use('classic')  # 图像样式经典
    fig, ax = plt.subplots()  # 绘制图像跟轴
    ax.scatter(rw.x_values, rw.y_values, s=15)  # 绘制散点图
    ax.set_aspect('equal')  # x,y间距相等
    plt.show()
    keep_running = input("Make another walk? (y/n): ")
    if keep_running == 'n':
        break

Python从入门到实践project数据可视化_模拟骰子_06

将生成数字顺序设置不同颜色
point_numbers = range(rw.num_points)  # 变化范围从0到设置数字最大值-1
    ax.scatter(rw.x_values, rw.y_values, c=point_numbers,
               cmap=plt.cm.Blues,
               edgecolors='none', s=15)    # edgecolors设置边缘颜色

Python从入门到实践project数据可视化_随机游走_07

突出起点终点
# 突出起点和终点
ax.scatter(0, 0, c='green', edgecolors='none', s=100)
ax.scatter(rw.x_values[-1], rw.y_values[-1], c='red',
           edgecolors='none',
           s=100)

Python从入门到实践project数据可视化_绘制折线图_08

隐藏坐标轴
# 隐藏坐标轴
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)

Python从入门到实践project数据可视化_绘制折线图_09

随机数值可改
rw = RandomWalk(50000)

Python从入门到实践project数据可视化_模拟骰子_10

Python从入门到实践project数据可视化_模拟骰子_10

Python从入门到实践project数据可视化_模拟骰子_12

设置生成图像窗口比例
fig, ax = plt.subplots(figsize=(15, 9))

Python从入门到实践project数据可视化_ide_13

Python从入门到实践project数据可视化_ide_14

模拟骰子

安装plotly和pandas
pip install plotly
pip install pandas
创建骰子代码
from random import randint


class Die:
    """表⽰⼀个骰⼦的类"""
    def __init__(self, num_sides=6):
        """骰⼦默认为 6 ⾯的"""
        self.num_sides = num_sides
    def roll(self):
        """"返回⼀个介于 1 和骰⼦⾯数之间的随机值"""
        return randint(1, self.num_sides)
运行骰子
from die import Die

# 创建⼀个 D6实例
die = Die()

# 掷⼏次骰⼦并将结果存储在⼀个列表中
results = []

for roll_num in range(100):
    result = die.roll()
    results.append(result)
    print(results)
分析结果
# 分析结果
frequencies = []   # 记录点数次数
poss_results = range(1, die.num_sides+1)
for value in poss_results:  # 依次循环从1-6
    frequency = results.count(value)  # 观察每次循环中有多少个value(1-6其中一个)
    frequencies.append(frequency)
print(frequencies)
数据可视化
根据结果绘制直方图
# 对结果进⾏可视化
title = "Results of Rolling One D6 1,000 Times"
labels = {'x': 'Result', 'y': 'Frequency of Result'}
fig = px.bar(x=poss_results, y=frequencies, title=title,labels=labels)
fig.show()
绘制俩骰子
# 创建两个 D6
die_1 = Die()
die_2 = Die()
max_result = die_1.num_sides + die_2.num_sides
poss_results = range(2, max_result+1)
设置刻度间距
# 进⼀步定制图形
fig.update_layout(xaxis_dtick=1)  # 每个刻度间距为1
投掷一个六面一个12面的骰子
# 创建两个 D6
die_1 = Die()
die_2 = Die(12)
title = "Results of Rolling a D6 and a D12 50,000 Times"
图像保存
fig.write_html('dice_visual_d6d10.html')

Python从入门到实践project数据可视化_ide_15