《Python编程:从入门到实践》学习记录(15)项目-数据可视化 matplotlib, pygal

简介: 《Python编程:从入门到实践》学习记录(15)项目-数据可视化 matplotlib, pygal
  • 安装可视化工具matplotlib
  • 一个数学会图库,可以绘制简单的图标,折线图,散点图。
  • 检查是否安装了matplotlib


image.png

安装matplotlib,必须使用pip3

  • pip3 install --user matplotlib


image.png

image.png



# 绘制折线图

import matplotlib.pyplot as plt
# X轴对应的数据
x_value_list = [1, 2, 3, 4, 5]
# Y轴对应的数据
squares = [1, 4, 9, 16, 25]
plt.plot(x_value_list, squares, linewidth=5)
# 设置图标的标题,并给坐标轴加上标签
plt.title("Square", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
# 设置刻度标记的大小
plt.tick_params(axis='both', labelsize=14)
plt.show()



image.png

# 绘制散点图


  • 在指定的xy坐标绘制一个点: scatter(x,y)

import matplotlib.pyplot as plt
x_list = list(range(101))
y_list = [x ** 2 for x in x_list]
plt.scatter(x_list, y_list, c='red', edgecolors='green', s=10)
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.tick_params(axis='both', which='major', labelsize=14)
# 横纵坐标的范围
plt.axis([0, 100, 0, 11000])
# 展示图片
# plt.show()
# 保存图片到文件
plt.savefig('s.png', bbox_inches='tight')


image.png



# 模拟随机漫步(散点图)


  • 生成随机x,y坐标点位 random_walk.py

from random import choice
class RandomWalk:
    def __init__(self, num_points=5000):
        self.num_points = num_points
        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
            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 data_show.walk.random_walk import RandomWalk
while True:
    rw = RandomWalk()
    rw.fill_walk()
    plt.scatter(rw.x_values, rw.y_values, s=15)
    plt.show()
    con_str = input("continue(y/n)?\n")
    if con_str == 'y':
        continue
    else:
        break


  • 结果


image.png

# 使用Pygal绘制矢量图



  • 安装 pip install --user pygal==1.7


image.png


  • 需求描述:掷一个点数为1-6的六面骰子,掷1000次,统计每个点数出现的次数,并将统计结果绘制成柱状svg图

from random import randint
import pygal
class Die:
    """骰子"""
    def __init__(self, num_sides=6):
        """
        初始化方法
        :param num_sides: 骰子的面数
        """
        self.num_sides = num_sides
    def roll(self):
        """
        掷骰子,Return random integer in range [a, b], including both end points.
        :return:
        """
        return randint(1, self.num_sides)
def draw(data_dict: dict):
    """
    绘图
    :param data_dict: 
    :return:
    """
    hist = pygal.Bar()
    hist.title = "投掷1000次6面筛子的结果统计"
    hist.x_labels = data_dict.keys()
    hist.x_title = "点数"
    hist.y_title = "点数对应的次数"
    hist.add('6面骰子', data_dict.values())
    # 导出问文件,扩展名必须为`.svg`
    hist.render_to_file('die_visual.svg')
die = Die()
result_list = []
# 掷骰子并保存结果
for i in range(1000):
    result_list.append(die.roll())
# 点数:出现次数
point_count_dict = {}
# 分析每个点数出现的次数
for i in range(1, die.num_sides + 1):
    point_count_dict[i] = result_list.count(i)
# 绘图
draw(point_count_dict)


  • 结果:(使用浏览器打开svg文件)
  • 各个点数出现的概率基本随机且相近


image.png

  • 需求:同时投掷两个6面骰子,统计两个骰子的结果之和

from random import randint
import pygal
class Die:
    """骰子"""
    def __init__(self, num_sides=6):
        """
        初始化方法
        :param num_sides: 骰子的面数
        """
        self.num_sides = num_sides
    def roll(self):
        """
        掷骰子,Return random integer in range [a, b], including both end points.
        :return:
        """
        return randint(1, self.num_sides)
def draw(data_dict: dict):
    """
    绘图
    :param data_dict:
    :return:
    """
    hist = pygal.Bar()
    hist.title = "投掷两个1000次6面筛子的结果统计"
    hist.x_labels = data_dict.keys()
    hist.x_title = "两个骰子的点数之和"
    hist.y_title = "点数对应的次数"
    hist.add('两个6面骰子', data_dict.values())
    # 导出问文件,扩展名必须为`.svg`
    hist.render_to_file('die_visual.svg')
die1 = Die()
die2 = Die()
result_list = []
# 掷骰子并保存结果
for i in range(1000):
    result_list.append(die1.roll() + die2.roll())
# 点数:出现次数
point_count_dict = {}
# 分析每个点数出现的次数
for i in range(2, 2 * die1.num_sides + 1):
    point_count_dict[i] = result_list.count(i)
# 绘图
draw(point_count_dict)


  • 结果
  • 出现点数之和为7的概率永远是最高的,因为7的组合方式最多~


image.png

相关文章
|
12天前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。
|
2天前
|
数据可视化 JavaScript 前端开发
Python中交互式Matplotlib图表
【10月更文挑战第20天】Matplotlib 是 Python 中最常用的绘图库之一,但默认生成的图表是静态的。通过结合 mpld3 库,可以轻松创建交互式图表,提升数据可视化效果。本文介绍了如何使用 mpld3 在 Python 中创建交互式散点图、折线图和直方图,并提供了详细的代码示例和安装方法。通过添加插件,可以实现缩放、平移和鼠标悬停显示数据标签等交互功能。希望本文能帮助读者掌握这一强大工具。
17 5
|
3天前
|
弹性计算 Linux iOS开发
Python 虚拟环境全解:轻松管理项目依赖
本文详细介绍了 Python 虚拟环境的概念、创建和使用方法,包括 `virtualenv` 和 `venv` 的使用,以及最佳实践和注意事项。通过虚拟环境,你可以轻松管理不同项目的依赖关系,避免版本冲突,提升开发效率。
|
6天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
25 5
|
7天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第24天】本文将带你进入Python的世界,从最基础的语法开始,逐步深入到实际的项目应用。我们将一起探索Python的强大功能和灵活性,无论你是编程新手还是有经验的开发者,都能在这篇文章中找到有价值的内容。让我们一起开启Python的奇妙之旅吧!
|
9天前
|
数据采集 存储 数据库
Python中实现简单爬虫的入门指南
【10月更文挑战第22天】本文将带你进入Python爬虫的世界,从基础概念到实战操作,一步步指导你如何使用Python编写一个简单的网络爬虫。我们将不展示代码示例,而是通过详细的步骤描述和逻辑讲解,帮助你理解爬虫的工作原理和开发过程。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你打开一扇通往数据收集新世界的大门。
|
7天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
【10月更文挑战第24天】 在Python的世界里,装饰器是一个既神秘又强大的工具。它们就像是程序的“隐形斗篷”,能在不改变原有代码结构的情况下,增加新的功能。本篇文章将带你走进装饰器的世界,从基础概念出发,通过实际例子,逐步深入到装饰器的高级应用,让你的代码更加优雅和高效。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往高效编程的大门。
|
9天前
|
存储 人工智能 数据挖掘
Python编程入门:构建你的第一个程序
【10月更文挑战第22天】编程,这个听起来高深莫测的词汇,实际上就像搭积木一样简单有趣。本文将带你走进Python的世界,用最浅显的语言和实例,让你轻松掌握编写第一个Python程序的方法。无论你是编程新手还是希望了解Python的爱好者,这篇文章都将是你的理想起点。让我们一起开始这段奇妙的编程之旅吧!
14 3
|
8天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
20 1
|
10天前
|
存储 程序员 开发者
Python编程入门:从零开始掌握基础语法
【10月更文挑战第21天】本文将带你走进Python的世界,通过浅显易懂的语言和实例,让你快速了解并掌握Python的基础语法。无论你是编程新手还是想学习一门新的编程语言,这篇文章都将是你的不二之选。我们将一起探索变量、数据类型、运算符、控制结构、函数等基本概念,并通过实际代码示例加深理解。准备好了吗?让我们开始吧!