π-Day快乐:Python可视化π

简介: 祝大家 π Day快乐!

π-Day快乐:Python可视化π

今天是3.14,正好是圆周率 π 的前3位,因此数学界将这一天定为 π day

π 可能是最著名的无理数了,人类对 π 的研究从未停止。目前人类借助计算机已经计算到 π 小数点后31.4万亿位了!这个记录是由来自Google的日本女程序员岩尾遥创造的。据说该计算程序在25台虚拟机上运行了121天,涉及170TB的数据,最终获得精确到 π 小数点后31.4万亿位的成绩。

计算 π 的精度也是衡量计算机算力的一种方法,该方法始于冯·诺依曼。直到今天依然有很多数学家在孜孜不倦地研究 π 的各种性质,甚至有人认为 π 小数位蕴含着宇宙的终极奥秘。今天我们用Python将 π 可视化,看看会诞生什么惊人的图案。

pi-day-750x300.jpg

思路

首先,我从网上下载了 π 小数点后100万位,保存在文本文件中。每50位一行,数据张这个样子:

14159265358979323846264338327950288419716939937510
58209749445923078164062862089986280348253421170679
82148086513282306647093844609550582231725359408128
48111745028410270193852110555964462294895493038196
44288109756659334461284756482337867831652712019091
45648566923460348610454326648213393607260249141273
72458700660631558817488152092096282925409171536436

然后我会用一定规则来可视化[0-9]这10个数字。目前想到的有两种:

  1. 点图 将[0-9]10个数字,每个数字赋一个颜色,然后一次绘制圆点。

pi2.png

  1. 线段图 [0-9]10个数字每个数字赋一个颜色和角度,绘制收尾相接的线段。

pi.png

点图

点图的绘制相对简单,首先定义颜色:

# 圆点边线颜色
color = ['gold', 'goldenrod', 'red', 'firebrick', 'mediumvioletred', 'darkorchid', 'royalblue', 'lightseagreen', 'mediumseagreen', 'olivedrab']
# 圆点填充颜色
color_fill = ['khaki', 'moccasin', 'lightcoral', 'lightsalmon', 'orchid', 'mediumpurple', 'skyblue', 'aquamarine', 'lightgreen', 'palegreen']

数字[0-9]当作颜色的下标索引获取颜色,绘制单个圆点的代码如下:

def draw_dot(n: int, c: int):
    """ 绘制圆点

    :param n: 小数位数值
    :param c: 第几位
    :return: None
    """
    t.color(color_fill[n])
    t.begin_fill()
    t.circle(10)
    t.end_fill()
    t.color(color[n])
    t.circle(10)
    pos = t.pos()

绘制完一个圆点后,turtle移动到下一个位置,这里我设置为每40位换一行:

def move(c: int):
    """ 移动到下一位置

    :param c: 小数点后第几位
    :return: None
    """
    pos = t.pos()
    t.penup()
    if c % 40 == 0: #每40位换一行
        t.goto(-600, pos[1] - 30)
    else:
        t.goto(pos[0] + 30, pos[1])
    t.pendown()

最后我们只要读取 π 的小数位,循环绘制圆点即可:

import turtle

turtle.setup(1.0, 1.0)
t = turtle.Turtle()
t.hideturtle()
t.pensize(2)
t.penup()
t.goto(-600, 400)
t.pendown()
t.speed(0)

# 绘制整数位3
count = 1
num = 3
draw_dot(num, count)
move(count)

# 循环绘制小数位
with open('圆周率前100万位.txt') as f:
    for i in range(28): # 绘制28*50=1400位
        word = f.readline().strip()
        for a in word:
            num = int(a)
            count += 1
            draw_dot(num, count)
            move(count)
    f.close()

turtle.done()

最终效果如下图:

pi4.png

线段图

有了点图的基础,线段图的绘制相对简单。直接上代码:

import turtle

turtle.setup(1.0, 1.0)
t = turtle.Turtle()
t.hideturtle()
t.pensize(2)
t.pendown()
t.left(90)
t.speed(0)
color = ['gold', 'goldenrod', 'red', 'firebrick', 'mediumvioletred', 'darkorchid', 'royalblue', 'lightseagreen', 'mediumseagreen', 'greenyellow']

# 绘制整数位3
last_num = 3
t.color(color[last_num])
t.right(last_num * 36)
t.forward(40)

# 循环绘制小数位
with open('圆周率前100万位.txt') as f:
    for i in range(100):
        word = f.readline().strip()
        for a in word:
            current_num = int(a)
            t.color(color[current_num])
            angle = (current_num - last_num) * 36
            t.right(angle)
            t.forward(20)
            last_num = current_num
    f.close()

turtle.done()

最终效果:

pi3.png

结论

怎么样?很神奇吧?如果你有更好的可视化思路,欢迎留言评论交流。

最后,祝大家 π Day快乐!

目录
相关文章
|
2月前
|
数据可视化 搜索推荐 大数据
基于python大数据的北京旅游可视化及分析系统
本文深入探讨智慧旅游系统的背景、意义及研究现状,分析其在旅游业中的作用与发展潜力,介绍平台架构、技术创新、数据挖掘与服务优化等核心内容,并展示系统实现界面。
|
4月前
|
数据采集 数据可视化 搜索推荐
Python数据分析全流程指南:从数据采集到可视化呈现的实战解析
在数字化转型中,数据分析成为企业决策核心,而Python凭借其强大生态和简洁语法成为首选工具。本文通过实战案例详解数据分析全流程,涵盖数据采集、清洗、探索、建模、可视化及自动化部署,帮助读者掌握从数据到业务价值的完整技能链。
480 0
|
4月前
|
存储 数据可视化 BI
Python可视化应用——学生成绩分布柱状图展示
本程序使用Python读取Excel中的学生成绩数据,统计各分数段人数,并通过Matplotlib库绘制柱状图展示成绩分布。同时计算最高分、最低分及平均分,实现成绩可视化分析。
266 0
|
2月前
|
数据可视化 数据挖掘 大数据
基于python大数据的水文数据分析可视化系统
本研究针对水文数据分析中的整合难、分析单一和可视化不足等问题,提出构建基于Python的水文数据分析可视化系统。通过整合多源数据,结合大数据、云计算与人工智能技术,实现水文数据的高效处理、深度挖掘与直观展示,为水资源管理、防洪减灾和生态保护提供科学决策支持,具有重要的应用价值和社会意义。
|
2月前
|
机器学习/深度学习 搜索推荐 数据可视化
基于python大数据的音乐可视化与推荐系统
本研究基于Python实现音乐数据采集、清洗、分析与可视化,并结合协同过滤算法构建个性化推荐系统。通过Echarts展示音乐热度及用户偏好,提升用户体验,助力音乐产业智能化发展。
|
2月前
|
搜索推荐 算法 大数据
基于python大数据的旅游景点可视化与推荐系统
本系统基于大数据与网络技术,构建个性化旅游推荐平台。通过收集用户偏好及行为数据,结合机器学习算法,提供精准的旅游目的地、住宿及交通推荐,旨在优化旅游信息传递,提升用户决策效率与旅行体验。
|
3月前
|
数据采集 数据可视化 API
驱动业务决策:基于Python的App用户行为分析与可视化方案
驱动业务决策:基于Python的App用户行为分析与可视化方案
|
4月前
|
存储 数据采集 数据可视化
Python自动化分析知网文献:爬取、存储与可视化
Python自动化分析知网文献:爬取、存储与可视化

推荐镜像

更多
下一篇
开通oss服务