本系列采用turtle、matplotlib、numpy这三个Python工具,以分形与计算机图像处理的经典算法为实例,通过程序和图像,来帮助读者一步步掌握Python绘图和数据可视化的方法和技巧,并且让读者感受到“ 龙枝屈曲竞分形,瑰丽绮错千万状”的分形魅力。

中国传统中的『分形』

『分』是会意字,由八和刀上下组合而成,表示用刀把物体切开。分的本义是分别、分开,引申为辨别、分辨,又引申为从主体分出的部分、分支。

『形』在篆文中是形声字,『彡』为形,『幵』(jian)为声,『彡』表示绘制的图案花纹。形的本义指形体,引申指物体的形状和样子。又引申指事物表现出的较为抽象的特征、情状。再转作动词,引申为显露、表现。

--商务印书馆《新华大字典》

『分形』由『分』与『形』组成,融合了两个字的含义,在古汉语中有三种意义:

  • 相似且关系密切。如成语“分形同气”,出自《吕氏春秋.精通》:“父母之于子也,子之于父母也,一体而两分,同气而异息。”,意思是父母与子女虽形体个别,但气息相通,彼此之间的关系相似、密切。
  • 分离。如南朝.宋.鲍照的《赠故人马子乔》中言道:“双剑将别离,先在匣中鸣。烟雨交将夕,从此遂分形。”这里的『分形』表示形同而分,形似而别的意思。
  • 形态复杂。如张衡的《西京赋》中道:“奇幻倏忽,易貌分形。”这里的『分形』指的是变化的各种形态。

宋明期间,理学盛行,其中的一个核心命题叫做『理一分殊』,也就是『分形』的哲学。『理一分殊』这一观点强调的是:理为万殊的根源,是本体,由本体可以化生出形相各异的天地万物。这里的『分』,不是指分散分解,而是化生。

这种分形化生的思想在佛教之中更为流传,千手观音、化身五五图以及观音菩萨三十三化身图都是这种思想的表现。《慧命经》中有一首解释《化身五五图》的诗:“分念成形窥色相,共灵显迹化虚无。”这首诗中的“分念成形窥色相”的含义,可以用南宋文学家陆游的一首咏梅绝句来诠释:

闻道梅花坼晓风,雪堆遍满四山中。

何方可化身千亿,一树梅前一放翁。

听闻梅花已在晨风中绽放,纷繁似雪,遍布山中,我要如何才能靠近每一株梅花呢?“分念成形”,一而二,二而三,化生千亿个身影,让每一棵梅花树前都有一个陆游常在。

大自然的分形几何

“云彩不是球体,山岭不是锥体,海岸线不是圆周,树皮并不光滑,闪电更不是沿直线传播。”

--《大自然的分形几何》

“内外灵光到处同,一佛国在一沙中。一粒沙含大千界,一个身心万法同。”

--《西游记》第14回

变化莫测的云彩,连绵起伏的山脉,风起云涌的波浪,犬牙交错的海岸线,树木、闪电、星团、水系、泥裂、冻豆腐,火焰、真菌,小麦须根、树冠、花草、支气管,以及小肠绒毛、大脑皮层……,从宏观到微观,从自然现象到生物构造,大自然向人类展示着各式各样、千变万化的形态,而这些形态都有着一个共同点,那就是:不规则、支离破碎,无法用经典的、规则的几何图形来进行描述。

在经典的欧氏几何中,图形是规则的,无论是墙壁、车轮、道路还是建筑物,都可以用直线、圆弧、圆锥或球等形状来描述。这些物体是基于规则生成的,所以在这些领域,欧氏几何游刃有余,然而,当面对大自然,面对各式各样的鬼斧神工时,它却往往显得力不从心。面对这样的状况,科学家们一直探索着从欧氏几何体系中脱离出来的方法。直到1975年,著名数学家Mandelbrot构思和发展了一种新的几何学:分形几何。这种几何学把自然形态看作是具有无限嵌套层次的精细结构,这种结构在不同的尺度下保持着某种相似性,也就是说,局部与整体相似,亦或是,局部是整体的缩影。

分形的原文Fractal是Mandelbrot用拉丁词根拼造出来的单词,意思是细片、破碎、分数、分级等等。70年代末,fractal传到中国,台湾根据其意直译为“碎形”,然而,中国科学院物理所的李荫远院士提出“fractal”应当译成“分形”,得到许多科学家的赞同,最终,fractal被定译为“分形”。李荫远院士的“分形”之译,准确地抓住了fractal的本质,并结合中国传统文化中『分形』的内涵。由此,中国传统的自然哲学思想,与几何学中的“fractal”理念,完美地融合到了一起 ——“简单产生复杂,混沌孕育秩序”。

数据可视化

“在计算机学科的分类中,利用人眼的感知能力对数据进行交互的可视表达以增强认知的技术,称为可视化,它将不可见或难以直接显示的数据转化为可感知的图形、符号、颜色、纹理等,增强数据识别效率,传递有效信息。                                                                                                                                                                                -- 《数据可视化》陈为

我们有一种与生俱来的“语言天赋”,无须后天的训练和学习,就可以流利地解读图像语言。一份数字化报表,人们需要逐条浏览,才能获知销量情况,但是只要一张柱状图,就可以让人一眼知晓所需要的信息。一座城市,道路复杂、河流交错、人群聚居,但是只要一张地图,就可以让人快速地了解这座城市的物理空间结构和人群分布。一家大型企业,有很多不同职能的部门,工作的细分程度也很高,但是只要一张组织结构图,就可以让人迅速地明了这家企业的层级关系和职责分工。

人眼是一个视觉信号输入处理器,这个处理器可以同时处理大量的信息,它具有很强的模式识别能力,可以快速地、甚至潜意识地解读图形、颜色、纹理等图像符号,解读的速度更是远远大于对数字或文本等形式的感知。正是因为人类视觉的这个特点,从文明初始起,人类便开始通过可视化来进行信息的记录、推理和分析,借助图形和图像,来研究、探索和传播万事万物的原理和规律。分形几何的发展也是如此,科学家们建立模型,在计算机上进行实验,然后将实验数据可视化,并在形成图形和图像的过程中,来捕获和探索大自然各种形态的奥秘。在本系列中,我们将采用Python绘图工具,来还原这些计算机实验以及数据可视化的过程。

数据可视化的工具有许多,最经典的莫过于Excel,大多数人都有使用Excel生成各种数据统计图的经验,然而Excel的缺点是流程的操作步骤繁琐、容易出错,并且很多时候不可复用,相比之下,Python的绘图更简单,只需要几行代码,便可以调用数据,生成各式图表,并且可以复用。

作为数据可视化工具,Python有以下优点:

  • Python是一门开源的高级编程语言,有着简洁、易读、灵活、易维护和模块化的优良特性,并且可以轻松地与其它编程语言及软件集成;
  • Python有着丰富的第三方工具库,可视化工具有基本的Matplotlib,也有复杂的Seaborn、Bokeh,这些工具的使用简便,代码可复用、可交互,并且可以画出Excel不具备的图以及特殊效果;

本系列采用的Python工具为turtle、matplotlib和numpy,其中以turtle模块开始,作为入门,逐步过渡到专业级的matplotlib和numpy库。matplotlib库是比较底层的python可视化第三方库,有着可定制性强、图表资源丰富、简单易用、达到出版质量级别的特点。Python中有许多可用于数据可视化的库,但大多数库都是基于matplotlib进行开发封装的,所以,学习python数据可视化,必须要学习matplotlib库,它的语法虽然略复杂,但非常灵活,几乎可以生成任何类型的图形,无论是简笔画、艺术图还是数据统计图。

(未完待续)

编后语:

这个系列是一个大杂烩,但并不是把材料简单地进行堆砌,它更像是一锅炖菜,猪肉炖粉条、小鸡炖蘑菇,诸如此类地,材料如下:

  • 主料:Python绘图、分形与混沌;
  • 辅料:中国传统自然哲学思想、古风配色、古诗词等等;

大火烧开,小火慢炖,希望成品能有新意,并富有营养。:)

写作,对我来说是件快乐的事,分享自己的知识和思想,在输入-输出-反馈的循环过程中,不断地提升自己,生活也由此变得充实而有趣,所以,无论是问题、纠错,还是建议、意见,都希望您能反馈给我,帮助我提升文章的质量。

分形、分形几何、数据可视化、Python绘图的更多相关文章

  1. python 爬虫与数据可视化--python基础知识

    摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...

  2. 数据可视化 seaborn绘图(1)

    seaborn是基于matplotlib的数据可视化库.提供更高层的抽象接口.绘图效果也更好. 用seaborn探索数据分布 绘制单变量分布 绘制二变量分布 成对的数据关系可视化 绘制单变量分布 se ...

  3. 数据可视化 -- Python

    前提条件: 熟悉认知新的编程工具(jupyter notebook) 1.安装:采用pip的方式来安装Jupyter.输入安装命令pip install jupyter即可: 2.启动:安装完成后,我 ...

  4. 数据可视化 seaborn绘图(2)

    统计关系可视化 最常用的关系可视化的函数是relplot seaborn.relplot(x=None, y=None, hue=None, size=None, style=None, data=N ...

  5. 《Python数据分析》笔记——数据可视化

    数据可视化 matplotlib绘图入门 为了使用matplotlib来绘制基本图像,需要调用matplotlib.pyplot子库中的plot()函数 import matplotlib.pyplo ...

  6. Python数据可视化——使用Matplotlib创建散点图

    Python数据可视化——使用Matplotlib创建散点图 2017-12-27 作者:淡水化合物 Matplotlib简述: Matplotlib是一个用于创建出高质量图表的桌面绘图包(主要是2D ...

  7. Python数据可视化-seaborn库之countplot

    在Python数据可视化中,seaborn较好的提供了图形的一些可视化功效. seaborn官方文档见链接:http://seaborn.pydata.org/api.html countplot是s ...

  8. Python数据分析matplotlib可视化之绘图

    Matplotlib是一个基于python的2D画图库,能够用python脚本方便的画出折线图,直方图,功率谱图,散点图等常用图表,而且语法简单. Python中通过matplotlib模块的pypl ...

  9. 【数据科学】Python数据可视化概述

    注:很早之前就打算专门写一篇与Python数据可视化相关的博客,对一些基本概念和常用技巧做一个小结.今天终于有时间来完成这个计划了! 0. Python中常用的可视化工具 Python在数据科学中的地 ...

随机推荐

  1. POJ 3415 Common Substrings(后缀数组 + 单调栈)题解

    题意: 给两个串\(A.B\),问你长度\(>=k\)的有几对公共子串 思路: 先想一个朴素算法: 把\(B\)接在\(A\)后面,然后去跑后缀数组,得到\(height\)数组,那么直接\(r ...

  2. Springboot如何启用文件上传功能

    网上的文章在写 "springboot文件上传" 时,都让你加上模版引擎,我只想说,我用不上,加模版引擎,你是觉得我脑子坏了,还是觉得我拿不动刀了. springboot如何启用文 ...

  3. Inkscape 太慢

    问题: 在画板上图像较多时, 会在粘贴 / 删除 时会陷入长时间的等待 解决: 最佳: Ubuntu上面的比windows上的快上几十倍, 测试比较, 感觉并不是Ubuntu上多用了GPU, 总之, ...

  4. 智能广告投放平台 All in One

    智能广告投放平台 All in One app demos 知之数据 一站式广告营销平台 https://hio.cn/ refs https://www.jonmellman.com/posts/p ...

  5. element-ui & babel-plugin-component config bug

    element-ui & babel-plugin-component config bug vue-cli bad babel.config.js module.exports = { pr ...

  6. 末日余晖 PC 版 下载

    末日余晖 PC 版 下载 <末日余晖>(英文名:Farlight 84)一款废土题材的射击游戏 Farlight 84 Official Trailer Farlight 84 官方预告片 ...

  7. TDD & Unit testing

    TDD & Unit testing TDD jest https://github.com/facebook/jest https://facebook.github.io/jest/zh- ...

  8. Flutter in DartPad

    Flutter in DartPad Gist Sharing https://github.com/dart-lang/dart-pad/wiki/Sharing-Guide https://gis ...

  9. 同城速递 & 同城跑腿 & 竞品分析

    同城速递 & 同城跑腿 & 竞品分析 toC / toB 闪送 https://www.ishansong.com/ https://www.tianyancha.com/compan ...

  10. 上天的源码要不要——GitHub 热点速览 v.21.08

    作者:HelloGitHub-小鱼干 前几天,"机智号" 所用的飞行软件框架 F´ 被 NASA 开源了,想看 F´ 这个嵌入式的代码不妨考虑下 Sourcetrail 这个神器, ...