《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

相关文章
|
23天前
|
机器学习/深度学习 算法 数据挖掘
线性回归模型的原理、实现及应用,特别是在 Python 中的实践
本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
50 3
|
7天前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
47 15
|
9天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
48 8
|
15天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
35 7
|
14天前
|
存储 缓存 Python
Python中的装饰器深度解析与实践
在Python的世界里,装饰器如同一位神秘的魔法师,它拥有改变函数行为的能力。本文将揭开装饰器的神秘面纱,通过直观的代码示例,引导你理解其工作原理,并掌握如何在实际项目中灵活运用这一强大的工具。从基础到进阶,我们将一起探索装饰器的魅力所在。
|
16天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
34 5
|
16天前
|
数据可视化 Python
使用Python进行数据可视化的初学者指南
在数据的海洋里,我们如何能够不迷失方向?通过数据可视化的力量,我们可以将复杂的数据集转化为易于理解的图形和图表。本文旨在为初学者提供一份简明的入门手册,介绍如何使用Python中的Matplotlib库来揭示数据背后的故事。我们将从基础的图表开始,逐步深入到更高级的可视化技术,确保每个步骤都清晰易懂,让初学者也能轻松上手。让我们开始绘制属于你自己的数据图谱吧!
|
27天前
|
机器学习/深度学习 人工智能 数据可视化
使用Python进行数据可视化:探索与实践
在数字时代的浪潮中,数据可视化成为了沟通复杂信息和洞察数据背后故事的重要工具。本文将引导读者通过Python这一强大的编程语言,利用其丰富的库函数,轻松入门并掌握数据可视化的基础技能。我们将从简单的图表创建开始,逐步深入到交互式图表的制作,最终实现复杂数据的动态呈现。无论你是数据分析新手,还是希望提升报告吸引力的专业人士,这篇文章都将是你的理想指南。
37 9
|
22天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
23天前
|
数据可视化 数据处理 Python
Python编程中的数据可视化技术
在Python编程中,数据可视化是一项强大的工具,它能够将复杂的数据集转化为易于理解的图形。本文将介绍如何使用matplotlib和pandas这两个流行的Python库来实现数据可视化,并展示一些实用的代码示例。通过这些示例,读者将学会如何创建各种图表,包括折线图、柱状图和散点图等,以便更好地理解和呈现数据。