IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python学习——使用Pygal生成矢量图 -> 正文阅读

[Python知识库]python学习——使用Pygal生成矢量图

使用Pygal

pygal是python的可视化包,只要用来生成可以生成可缩放的矢量图形文件,对于需要在尺寸不同的屏幕上显示的图表,它们将自动缩放,以适应观看者的屏幕。
如果你打算以在线方式使用图表,请考虑使用Pygal来生成它们,这样它们在任何设备上显示时都会很美观。
#矢量图放大不失真

(1)安装pygal包
Linux和OSX系统

pip install --user pygal

Windows系统

python -m pip install --user pygal

【注意】:你可能需要使用命令pip3 而不是pip ,如果这还是不管用,你可能需要删除标志–user 。
要了解使用Pygal可创建什么样的图表,请查看图表类型画廊:访问http://www.pygal.org/ ,单击Documentation,再单击Chart types。每个示例都包含源代码,让你知道这些图表是如何生成的。
(2)案例模拟
【案例需求】:使用Pygal模拟掷骰子。
【案例模拟】:掷6面的常规骰子时,可能出现的结果为1~6点,且出现每种结果的可能性相同。然而,如果同时掷两个骰子,某些点数出现的可能性将比其他点数大。为确定哪些点数出现的可能性最大,我们将生成一个表示掷骰子结果的数据集,并根据结果绘制出一个图形。
【案例实现】:

#创建Die类
class Die():
    """表示一个骰子的类"""
    def __init__(self, num_sides=6):
        """骰子默认为6面"""
        self.num_sides = num_sides
    def roll(self):
        """"返回一个位于1和骰子面数之间的随机值"""
        return randint(1, self.num_sides)

模拟掷骰子
情形一、掷一个6面的骰子,分析结果

#掷一个6面的骰子
def roll_die():
    #实例一个骰子对象,面数采用默认值
    die = Die()
    #掷几次骰子,并将结果存储在一个列表中
    results = []
    for roll_num in range(1000):#循环掷100次
        result = die.roll()
        results.append(result)#把结果存入结果列表
    #补充 range(end)  默认从0开始,即0-end-1  含0,不含end

    # 分析掷骰子结果  results结果集
    #frequencies={}
    frequencies =[]
    for value in range(1, die.num_sides + 1):
        frequency = results.count(value)#统计频数,每一个数字出现了几次
        frequencies.append(frequency)#存入列表
        #frequencies[value]=frequency #存入字典
    print(frequencies)

    #根据结果进行绘制图形分析  可视化
    #1、直方图(条形图)  pygal.Bar() 创建条形图实例
    hist = pygal.Bar()  #创建条形图实例
    
    #绘制标题
    hist.title = "Results of rolling one D6 1000 times."
    #绘制x轴标签
    hist.x_labels = ['1', '2', '3', '4', '5', '6']
    #绘制x轴标题
    hist.x_title = "Result"
    #绘制y轴标题
    hist.y_title = "Frequency of Result"
    #使用add() 将一系列值添加到图表中,向它传递要给添加的值指定的标签,还有一个列表,其中包含将出现在图表中的值
    hist.add('D6', frequencies) #D6是标签(图例)  frequencies数据列表
    #将图表渲染成svg文件,文件的扩展名必须为.svg
    hist.render_to_file('single_roll.svg')
#注意:Pygal让这个图表具有交互性:如果你将鼠标指向该图表中的任何条形,将看到与之相关联的数据。
#问题:实际操作时,发现鼠标移到图片上没有显示数据。
#原因:Pygal版本太老,和目前所用的python版本不兼容,或者使用的浏览器版本太低
#解决:更新Pygal   pip install --upgrade pygal

【small tips】:
(1)创建条形图
【语法】:chart=pygal.Bar(style=**,x_label_rotation=角度,show_legend=False/True)
注意:chart是pygal的实例,Bar首字母必须大写;style为样式,x_label_rotation旋转角度(顺时针旋转);show_legend是否显示图例。
(2)svg
是一种可缩放的矢量图像图形文件格式,这种格式的文件具有边缘清晰、文件体积小、传输方便的特点,因此在网页设计中比较常用。
【结果展示】:
在这里插入图片描述
情形二、同时掷2个6面的骰子

#同时掷两个6面的骰子
def  double_roll():
    # 创建两个D6骰子
    die_1 = Die()
    die_2 = Die()
    # 掷骰子多次,并将结果存储到一个列表中
    results = []
    for roll_num in range(1000):
        result = die_1.roll() + die_2.roll()
        results.append(result)
    #分析结果
    frequencies = []
    max_result = die_1.num_sides + die_2.num_sides
    for value in range(2, max_result+1):
        frequency = results.count(value)
        frequencies.append(frequency)
    # 可视化结果  绘制直方图
    hist = pygal.Bar()
    hist.title = "Results of rolling two D6 dice 1000 times."
    hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
    hist.x_title = "Result"
    hist.y_title = "Frequency of Result"
    hist.add('D6 + D6', frequencies)
    hist.render_to_file('double_roll.svg')

【解析】:算法思路与掷一个骰子一致,只是以相同的算法,新建了两个骰子实例。
【结果展示】:
在这里插入图片描述
情形三、同时掷两个面数不同的骰子

def double_diff():
    #实例化一个6面骰子和一个10面骰子
    die_1 = Die()
    die_2 = Die(10)
    # 掷骰子多次,并将结果存储在一个列表中
    results = []
    for roll_num in range(50000):
        result = die_1.roll() + die_2.roll()
        results.append(result)
    # 分析结果  要完成一个数据频数统计的功能
    frequencies = []
    #计算可能的结果最大数
    max_result = die_1.num_sides + die_2.num_sides
    for value in range(2, max_result + 1):#所有可能出现的结果项
        frequency = results.count(value)#频数统计
        frequencies.append(frequency)

    # 可视化结果  绘制直方图
    hist = pygal.Bar()
    #添加图象标题
    hist.title = "Results of rolling a D6 and a D10 50,000 times."
    hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16']
    hist.x_title = "Result"
    hist.y_title = "Frequency of Result"
    hist.add('D6 + D10', frequencies)
    #保存为svg矢量图格式
  	hist.render_to_file('double_diff_roll.svg')

【解析】:算法思路与掷一个骰子一致,只是以相同的算法,新建了两个骰子实例。在这里插入图片描述
【补充】:
先将展示3种生成hist.x_labels列表的方法:
法一、for循环生成

    #for循环生成 hist.x_labels列表
    xs = []
    for value in range(2, max_result + 1):
         xs.append(value)
    hist.x_labels = xs

法二、列表解析法

	#列表解析法
    xs=[value for value in range(2,max_result+1)]
    hist.x_labels = xs

法三、直接赋值

hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16']

实现hist.x_labels列表自动生成,可将方法推广至hist.y_labels以及其他列表的生成

==》python列表的生成都可以使用以上这三种方法

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:43:09  更:2021-07-23 10:45:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/25 14:49:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计