《Python编程从入门到实践》项目2 生成数据, 折线图, 随机漫步, pygal

本文介绍了使用matplotlib和Pygal库进行数据可视化的多种方法,包括生成折线图、散点图、随机漫步图以及掷骰子结果的直方图。通过实例展示了如何设置图表样式、颜色映射和自动保存图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第 15 章  生成数据


安装matplotlib

sudo apt-get install python3-matplotlib


15.2 绘制简单的折线图

  plot and scatter

要查看使用matplotlib可制作的各种图表,请访问http://matplotlib.org/的示例画廊。单击画廊
中的图表,就可查看用于生成图表的代码。


    15.2.1 修改标签文字和线条粗细
    15.2.2 校正图形

import matplotlib.pyplot as plt

input_values = [1,2,3,4,5]
squares = [1, 4, 9 ,16, 25]
plt.plot(input_values, squares, linewidth = 5)

#设置图表标题, 并给坐标轴加上标签
plt.title("Square Numbers", fontsize = 24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Vaule", fontsize=14)

#设置刻度标记的大小
plt.tick_params(axis='both',labelsize=14)

plt.show()


    15.2.3 使用 scatter() 绘制散点图并设置其样式
    15.2.4 使用 scatter() 绘制一系列点
    15.2.5 自动计算数据
    15.2.6 删除数据点的轮廓
    15.2.7 自定义颜色
    15.2.8 使用颜色映射
    15.2.9 自动保存图表

import matplotlib.pyplot as plt
#自动计算数据
x_values = list(range(1,1001))
y_values = [x**2 for x in x_values]

#隐射颜色, 删除轮廓
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, edgecolor='none', s=10)
#设置图表标题并给坐标轴加上标签
plt.title("Squre 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.show()
#保存图标
plt.savefig('squares_plot.png', bbox_inches='tight')


15.3 随机漫步

    15.3.1 创建 RandomWalk() 类
    15.3.2 选择方向
    15.3.3 绘制随机漫步图
    15.3.4 模拟多次随机漫步
    15.3.5 设置随机漫步图的样式
    15.3.6 给点着色
    15.3.7 重新绘制起点和终点
    15.3.8 隐藏坐标轴
    15.3.9 增加点数
    15.3.10 调整尺寸以适合屏幕

随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向,
结果是由一系列随机决策决定的。

random_walk.py

from random import choice

class RandomWalk():
    """生成一个随机漫步数据的类"""
    
    def __init__(self, num_points=5000):
        """初始化随机漫步数据的类"""
        self.num_points = num_points
        
        #所有随机漫步都始于(0,0)
        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
                
            #计算下一个点的x和y值
            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)
import matplotlib.pyplot as plt

from random_walk import RandomWalk

#创建一个RandomWalk实例, 并将其包含的点都绘制出来

while True:
    rw = RandomWalk(50000)
    rw.fill_walk()

    #设置绘图窗口的尺寸, dpi默认80 Python假定屏幕分辨率为80像素/英寸
    #函数 figure() 用于指定图表的宽度、高度、分辨率和背景色
    plt.figure(dpi = 128, figsize=(10,8))

    #plt.scatter(rw.x_values, rw.y_values, s=5)
    #映射点颜色
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap=plt.cm.Blues, edgecolor='none', s=1)
    
    #凸出起点和终点
    plt.scatter(0,0, c='green', edgecolors='none', s=100)
    plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red', edgecolors='none', s=100)
    
    
    #隐藏坐标轴
    plt.axes().get_xaxis().set_visible(False)
    plt.axes().get_yaxis().set_visible(False)
    
    plt.show()
    
    keep_running = input("Make another walk? (y/n): ")
    if keep_running == 'n':
        break


15.4 使用 Pygal 模拟掷骰子

    15.4.1 安装 Pygal
    15.4.2 Pygal 画廊
    15.4.3 创建 Die 类
    15.4.4 掷骰子
    15.4.5 分析结果
    15.4.6 绘制直方图
    15.4.7 同时掷两个骰子
    15.4.8 同时掷两个面数不同的骰子

如果你打算以在线方式使用图表,请考虑使用Pygal来生成它们,这样它们在任何设备上显示时都会很美观

6面的常规骰子时,可能出现的结果为1~6点,且出现每种结果的可能性相同。然而,如果同时掷两个骰子,某些点数出现的可能性将
比其他点数大。为确定哪些点数出现的可能性最大,我们将生成一个表示掷骰子结果的数据集,
并根据结果绘制出一个图形。

die.py

from random import randint

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

#创建一个D6
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)
    
print(frequencies)

#对结果进行可视化--- 直方图
hist = pygal.Bar()
hist.title = "Results of rolling two D6 1000 times."
hist.x_labels = []
for i in range(2, max_result+1):
    hist.x_labels.append(str(i))
print(hist.x_labels)
#hist.x_labels = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
hist.x_title = "Results"
hist.y_title = "Frequency of Result"

#add() 将一系列值添加到图表中
#传递给添加的值指定的标签,还有一个列表,其中包含将出现在图表中的值
hist.add('D6 + D6', frequencies)
hist.render_to_file('die_visual.svg')

 

 

<think>好的,我现在需要帮助用户生成Python编程:从入门实践》这本书的思维导图,并且用户希望知道有哪些自动生成工具或模板可以使用。首先,我要回顾之前的对话历史,确保符合用户的需求和已有的信息。 用户之前询问了Python零基础入门的学习资料,我提供了分阶段的学习路线、资源推荐以及学习方法。现在用户提到了站内引用,这些引用主要关于Python学习路线和思维导图的资源。用户现在想要针对《Python编程:从入门实践》这本书生成思维导图,并询问工具或模板。 首先,我需要确定用户的具体需求。用户可能希望将书中的内容结构化,通过思维导图来帮助理解和记忆。因此,我需要推荐适合的工具,同时可能需要提供生成思维导图的步骤或方法,尤其是如何根据书籍内容来组织节点。 接下来,回顾用户提供的引用内容,引用1提到了Python学习路线的思维导图,包括基础语法、面向对象编程数据处理等,这可能和这本书的章节结构相似。引用2和4提到了一些资源,包括技术点整理和全套思维导图,可能相关的模板或结构可以参考。引用3则列出了Python的不同方面,如数据库、多线程等,可能与书籍的高级章节相关。 现在需要思考哪些工具适合生成思维导图。常见的工具包括XMind、MindMaster、FreeMind等,这些工具通常支持手动创建,但用户可能希望自动生成,所以需要考虑是否有支持从文本或大纲自动生成思维导图的工具。例如,有些工具可以从Markdown文件或大纲文本导入生成结构。另外,是否有现成的模板可以直接使用,或者需要用户自己根据书籍目录创建。 还需要考虑用户的技术水平,用户是零基础,所以工具需要易于使用,不需要复杂的配置。可能需要推荐一些在线工具,如ProcessOn、百度脑图,这些不需要安装,界面友好。 另外,用户提到的书籍《Python编程:从入门实践》的结构可能需要分析。通常这类书籍分为基础部分和项目部分,例如第一部分讲语法,第部分做项目。思维导图需要涵盖这些部分,可能需要分主要章节、关键概念、代码示例等。 然后,我需要确认是否有现成的模板或资源可以直接使用。根据引用中的信息,用户提供的站内引用可能有相关的思维导图资源,例如引用2提到的“最全python入门思维导图”可能包含基础部分,但需要结合具体书籍内容进行调整。如果没有现成的模板,用户可能需要手动创建,但可以借鉴这些资源的结构。 最后,总结工具推荐和步骤,可能需要分步骤说明如何根据书籍目录创建思维导图,推荐合适的工具,并提供学习建议,比如结合实践项目来巩固知识。同时,确保回答结构清晰,符合用户之前的问题格式,并添加相关问题以引导用户进一步探索。</think>根据《Python编程:从入门实践》的体系结构,结合思维导图生成需求,为你整理以下专业解决方案: --- ### 一、专用工具推荐 1. **XMind(首推)** - 内置「技术文档」模板库 - 支持从Markdown大纲自动生成层级结构 ```python # 书籍目录转Markdown示例(自动化脚本思路) import os with open('book_toc.txt') as f: chapters = [line.strip() for line in f] md_content = "\n".join([f"# {chap}" for chap in chapters]) ``` 2. **MindMaster(教育版)** - 提供「编程学习」主题模板 - 支持API批量导入知识节点[^2] 3. **在线工具** - **GitMind**:含「Python教材解析」模板 - **ProcessOn**:可直接复用「从入门实践」学习路线图[^4] --- ### 、核心内容框架 基于原书知识体系,推荐三级结构设计: ``` 基础语法层 ├── 变量与简单数据类型 │ ├── 字符串操作(.title()/.format()) │ └── 数字类型转换(int()/float()) ├── 列表与字典 │ ├── 列表解析式 │ └── 嵌套字典存储 └── 用户输入 ├── input()函数 └── while循环验证 项目实践层 ├── 数据可视化 │ ├── Matplotlib基础 │ └── Pygal交互图表 ├── Web应用 │ ├── Django模型设计 │ └── 用户认证系统 └── 游戏开发 ├── Pygame事件循环 └── 碰撞检测逻辑 ``` --- ### 三、自动化生成技巧 1. **文本转导图** - 使用Typora编辑章节概要后导出`.md`文件 - 通过XMind「文件→导入→Markdown」自动生成结构[^3] 2. **代码关联** ```mermaid graph LR A[类/对象] --> B(继承机制) A --> C(属性封装) B --> D[[案例:游戏角色类]] ``` 3. **知识图谱扩展** - 在思维导图节点添加: - 对应书页标注(如:P.158) - 重点习题标记(★) - 扩展阅读链接[^1] --- ### 四、学习效果增强 1. **渐进式更新** - 每完成一章添加「掌握进度条」 - 用不同颜色标注难点(红色)、易错点(黄色) 2. **项目驱动法** - 在「外星人入侵」节点附加: - 代码片段 - 调试记录 - 性能优化思路 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值