π-Day快乐:Python可视化π

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

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

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

文章目录

  • 思路
  • 点图
  • 线段图
  • 结论

思路

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

14159265358979323846264338327950288419716939937510
58209749445923078164062862089986280348253421170679
82148086513282306647093844609550582231725359408128
48111745028410270193852110555964462294895493038196
44288109756659334461284756482337867831652712019091
45648566923460348610454326648213393607260249141273
72458700660631558817488152092096282925409171536436

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

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

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

点图

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

# 圆点边线颜色
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()

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

import turtleturtle.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 += 1draw_dot(num, count)move(count)f.close()turtle.done()

最终效果如下图:

线段图

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

import turtleturtle.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) * 36t.right(angle)t.forward(20)last_num = current_numf.close()turtle.done()

最终效果:

结论

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

最后,祝大家 π \pi π Day快乐!

π-Day快乐:Python可视化π相关推荐

  1. python三维数据转换成二维_5大Python可视化库到底选哪个好?一篇文章搞定从选库到教学...

    最近和鲸社区的大佬们,竟不约而同地写起了可视化库的教程,开始了掰头 ※完整教程列表在文末附录 虽然对于我们这种吃瓜群众来说是件好事,但 大概大佬的快乐往往就是那么的朴实无华且枯燥吧.害,管他呢,赶紧拿 ...

  2. python拿什么做可视化界面好_5大Python可视化库到底选哪个好?一篇文章搞定从选库到教学...

    最近和鲸社区的大佬们,不约而同地写起了可视化库的教程 虽然对于我们这种吃瓜群众来说是件好事,但 大概大佬的快乐往往就是那么的朴实无华且枯燥吧.害,管他呢,赶紧拿出来给大家瞅瞅. 今天提及的5个Pyth ...

  3. python可视化来分析全国疫情

    很长一段时间在python下出图都是使用matplotlib,其好处就是应用比较广泛,文档很容易找,不过出的图微显丑陋.pyecharts 是百度的echarts基于python的实现,可以很方便的直 ...

  4. Python可视化——3D绘图解决方案pyecharts、matplotlib、openpyxl

    Python可视化--3D绘图解决方案pyecharts.matplotlib.openpyxl 1. pyecharts 2. matplotlib 3. openpyxl 这篇博客将介绍pytho ...

  5. python可视化案例书籍推荐_这5款Python可视化神器,总有一款适合你!

    我们都知道视觉是人们很重要的一种感官,而Python中可视化,在数据相关的研发中也起到"一木支危楼"的作用.如果从直接查看离线存储在各类数据库中杂乱无章的数据,会让人瞬间感到崩溃且 ...

  6. 面向小白的最全 Python 可视化教程,超全的!

    作者 | 俊欣 来源丨关于数据分析与可视化 今天小编总结归纳了若干个常用的可视化图表,并且通过调用plotly.matplotlib.altair.bokeh和seaborn等模块来分别绘制这些常用的 ...

  7. 10 个案例分享几个 Python 可视化小技巧,助你绘制高质量图表

    作者 | 俊欣 来源 | 关于数据分析与可视化 一般在Python当中,我们用于绘制图表的模块最基础的可能就是matplotlib了,今天小编分享几个用该模块进行可视化制作的技巧,帮助你绘制出更加高质 ...

  8. 强烈推荐一款Python可视化神器!

    参加 2019 Python开发者日,请扫码咨询 ↑↑↑ 翻译 | Lemon 来源 | Plotly 出品 | Python数据之道 (ID:PyDataRoad) Plotly Express 入 ...

  9. python可视化lassocv特征筛选之后的特征的相关性分析热力图

    python可视化lassocv特征筛选之后的特征的相关性分析热力图 目录 python可视化lassocv特征筛选之后的特征的相关性分析热力图 #lassocv模型

最新文章

  1. 对比.Net PetShop和Duwamish来探讨Ado.Net的数据库编程模式
  2. coba mysql_在Android Studio中将数据从MySQL数据库显示到TextView中-问答-阿里云开发者社区-阿里云...
  3. Ubuntu快速重装软件的技巧
  4. nginx 常见参数以及重定向参数配置
  5. C++文件流:myfstream,fstream,文件读写,随机文件读写【C++文件流】(59)
  6. 深度学习tensorflow实现宝可梦图像分类
  7. promise用法_图解 Promise 实现原理(四):Promise 静态方法实现
  8. 静态内部类、局部内部类、匿名内部类、lamda表达式
  9. windows环境下部署Tomcat到服务器
  10. iText API操作doc文档
  11. 【团队管理系列】团队管理方面的量化数据
  12. 2019年南京大学计算机研究生复试分数线,南京大学2019年硕士研究生复试基本分数线...
  13. 洽谈国内单机游戏下载站
  14. 在线教育:基因不同,命运不同
  15. java 自省_java spring mvc 自省机制填充
  16. properties文件乱码问题
  17. mac要装anaconda吗_在Mac OS X上安装Anaconda
  18. cadence PCB边框(Outline)加倒角
  19. 浅谈TCP协议的端口(port)
  20. Windows10 DPC_WATCHDOG_VIOLATION 蓝屏故障分析

热门文章

  1. ssm+jsp电影院在线订票选座管理系统 java
  2. YOLOv8实践 | 手把手训练教学及YOLOv8的多任务使用
  3. HTML select标签提交表单
  4. 电脑桌面右下角时间图标添加秒钟显示
  5. 25个有用的 JavaScript 单行代码
  6. 电销越来越难做,外呼系统怎么帮助涨业绩
  7. KeyboardEvent.metaKey 苹果电脑command键按下、win键按下
  8. USB3.1-Type C 接口静电防护
  9. 基于声网 SDK 实现 iOS 端的一对一视频通话
  10. 第七届工程训练比赛之智能垃圾分类