《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

相关文章
|
1天前
|
数据采集 JSON 测试技术
如何在Python中高效实现CSV到JSON的数据转换
在实际项目中,数据格式转换是常见问题,尤其从CSV到JSON的转换。本文深入探讨了多种转换方法,涵盖Python基础实现、数据预处理、错误处理、性能优化及调试验证技巧。通过分块处理、并行处理等手段提升大文件转换效率,并介绍如何封装为命令行工具或Web API,实现自动化批量处理。关键点包括基础实现、数据清洗、异常捕获、性能优化和单元测试,确保转换流程稳定高效。
102 82
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
314 10
|
7天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
29天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
112 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
2天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
24 12
|
1天前
|
数据采集 存储 前端开发
用Python抓取亚马逊动态加载数据,一文读懂
用Python抓取亚马逊动态加载数据,一文读懂
|
2月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
2月前
|
数据可视化 数据挖掘 开发者
Pandas数据可视化:matplotlib集成(df)
Pandas 是 Python 中强大的数据分析库,Matplotlib 是常用的绘图工具。两者结合可方便地进行数据可视化,帮助理解数据特征和趋势。本文从基础介绍如何在 Pandas 中集成 Matplotlib 绘制图表,如折线图、柱状图等,并深入探讨常见问题及解决方案,包括图表显示不完整、乱码、比例不合适、多子图布局混乱、动态更新图表等问题,提供实用技巧和代码示例。掌握这些方法后,你将能更高效地处理数据可视化任务。
60 9
|
2月前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控

热门文章

最新文章