本系列采用turtle、matplotlib、numpy这三个Python工具,以分形与计算机图像处理的经典算法为实例,通过程序和图像,来帮助读者一步步掌握Python绘图和数据可视化的方法和技巧,并且让读者感受到“ 龙枝屈曲竞分形,瑰丽绮错千万状”的分形魅力。本系列共有八章,分别为:海岸线有多长,基因与生成元,植物算法之美,凝聚、凝聚、凝聚,拼贴与显影,优雅的曲线,奇异瑰丽的图案,生命的迭代演化。
中国传统中的『分形』
『分』是会意字,由八和刀上下组合而成,表示用刀把物体切开。分的本义是分别、分开,引申为辨别、分辨,又引申为从主体分出的部分、分支。
『形』在篆文中是形声字,『彡』为形,『幵』(jian)为声,『彡』表示绘制的图案花纹。形的本义指形体,引申指物vb.net教程体的形状和样子。又引申指事物表现出的较为抽象的特征、情状。再转作动词,引申为显露、表现。
--商务印书馆《新华大字典》
『分形』由『分』与『形』组成,融合了两个字的含义,在古汉语中有三种意义:
相似且关系密切。如成语“分形同气”,出自《吕氏春秋.精通》:“父母之于子也,子之于父母也,一体而两分,同气而异息。”,意思是父母与子女虽形体个别,但气息相通,彼此之间的关系相似、密切。
分离。如南朝.宋.鲍照的《赠故人马子乔》中言道:“双剑将别离,先在匣中鸣。烟雨交将夕,从此遂分形。”这里的『分形』表示形同而分,形似而别的意思。
形态复杂。如张衡的《西京赋》中道:“奇幻倏忽,易貌分形。”这里的『分形』指的是变化的各种形态。
宋明期间,理学c#教程盛行,其中的一个核心命题叫做『理一分殊』,也就是『分形』的哲学。『理一分殊』这一观点强调的是:理为万殊的根源,是本体,由本体可以化生出形相各异的天地万物。这里的『分』,不是指分散分解,而是化生。
这种分形化生的思想在佛教之中更为流传,千手观音、化身五五图以及观音菩萨三十三化身图都是这种思想的表现。《慧命经》中有一首解释《化身五五图》的诗:“分念成形窥色相,共灵显迹化虚无。”这首诗中的“分念成形窥色相”的含义,可以用南宋文学家陆游的一首咏梅绝句来诠释:
闻道梅花坼晓风,雪堆遍满四山中。
何方可化身千亿,一树梅前一放翁。
听闻梅花已在晨风中绽放,纷繁似雪,遍布山中,我要如何才能靠近每一株梅花呢?“分念成形”,一而二,二而三,化生千亿个身影,让每一棵梅花树前都有一个陆游常在。
大自然的分形几何
“云彩不是球体,山岭不是锥体,海岸线不是圆周,树皮并不光滑,闪电更不是沿直线传播。”
--《大自然的分形几何》
“内外灵光到处同,一佛国在一沙中。一粒沙含大千界,一个身心万法同。”
--《西游记》第14回
变化莫测的云彩,连绵起伏的山脉,风起云涌的波浪,犬牙交错的海岸线,树木、闪电、星团、水系、泥裂、冻豆腐,火焰、真菌,小麦须根、树冠、花草、支气管,以及小肠绒毛、大脑皮层……,从宏观到微观,从自然现象到生物构造,大自然向人类展示着各式各样、千变万化的形态,而这些形态都有着一个共同点,那就是:不规则、支离破碎,无法用经典的、规则的几何图形来进行描述。
在经典的欧氏几何中,图形是规则的,无论是墙壁、车轮、道路还是建筑物,都可以用直线、圆弧、圆锥或球等形状来描述。这些物体是基于规则生成的,所以在这些领域,欧氏几何游刃有余,然而,当面对大自然,面对各式各样的鬼斧神工时,它却往往显得力不从心。面对这样的状况,科学家们一直探索着从欧氏几何体系中python基础教程脱离出来的方法。直到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绘图、分形与混沌;
辅料:中国传统自然哲学思想、古风配色、古诗词等等;
大火烧开,小火慢炖,希望成品能有新意,并富有营养。:)
写作,对我来说是件快乐的事,分享自己的知识和思想,在输入-输出-反馈的循环过程中,不断地提升自己,生活也由此变得充实而有趣,所以,无论是问题、纠错,还是建议、意见,都希望您能反馈给我,帮助我提升文章的质量。