《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

相关文章
|
22天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
106 80
|
24天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
6天前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
15天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
11天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
33 14
|
9天前
|
数据可视化 数据挖掘 DataX
Python 数据可视化的完整指南
Python 数据可视化在数据分析和科学研究中至关重要,它能帮助我们理解数据、发现规律并以直观方式呈现复杂信息。Python 提供了丰富的可视化库,如 Matplotlib、Seaborn、Plotly 和 Pandas 的绘图功能,使得图表生成简单高效。本文通过具体代码示例和案例,介绍了折线图、柱状图、饼图、散点图、箱形图、热力图和小提琴图等常用图表类型,并讲解了自定义样式和高级技巧,帮助读者更好地掌握 Python 数据可视化工具的应用。
49 3
|
14天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
27天前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
73 15
|
26天前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
30天前
|
存储 程序员 Python
Python学习的自我理解和想法(2)
今日学习Python第二天,重点掌握字符串操作。内容涵盖字符串介绍、切片、长度统计、子串计数、大小写转换及查找位置等。通过B站黑马程序员课程跟随老师实践,非原创代码,旨在巩固基础知识与技能。