标签:
自从有了计算机,便很少有人手工绘制图表了。计算机绘制出的图表横平竖直,可以随意使用各种颜色,也完全不用担心画错需要重来的问题。
但有没有一种感觉,看多了工整的图表,变得有些审美疲劳。在各行各业逐渐过渡到计算机绘图的时候,有些人开始怀念起手绘来,只不过用全新的方式——触控板来进行手绘。
1 用Python的maplotlib包绘图
平时喜欢倒腾一些数据,没少画各种图,最常用的是Python的Matplotlib包,简单的几行代码,便可以绘出精美的图来。matplotlib包模仿了MATLAB的绘图接口,想必用过MATLAB的人会很熟悉,本文并不会详细介绍各种绘图的命令,只是展示一种可能性——在图表里增添一点涂鸦的美感。
比如,我想知道篮球比赛里,得分的分布是什么样的。于是我就爬了美国大学体育协会篮球比赛的得分数据,加上几行代码
mean = sum(data)/len(data) std = stdev(data) data_range = (min(data), max(data)) x = np.linspace(data_range[0], data_range[1], 100) norm = stats.norm(mean, std) plt.hist(data, normed=True ,bins=max(data)+1, range=(-0.5,max(data)+0.5), color=‘green‘, label=‘实际分布‘, histtype=‘stepfilled‘) plt.axvline(x=mean, color=‘yellow‘, linewidth=2) plt.plot(x, norm.pdf(x), ‘--‘, label=‘标准正态分布‘, color=‘red‘, linewidth=2) plt.xlabel(‘一场比赛的得分数目‘) plt.title(‘NCAA篮球赛得分条形图‘) plt.legend()
就有了下面的这个条形图
没有意料到是一个完美的正态分布,再也没有比这更完美的了,这就是数据可视化的魅力。
2 xkcd模式
xkcd是一个关于浪漫、讽刺、数学和语言的网络漫画,画的往往是geek的幽默,我表示很难看出笑点在哪。xkcd在geek圈的影响力可谓不小,当年xkcd画了一幅Python的漫话,说用Python编程,就像在云端漫步一样,比喻利用Python提供的各种各样的包,可以实现快速地开放。
漫画里写着I JUST JTYPED import antigratity,过后没多久Python的开团队就在Python的发行版本里,添加了一个antigravity包,import这个包会直接打开这幅漫画。这是真的,查了一番资料我才确定是先有的这幅漫画,再有的antigratity包。
觉得这种手绘的漫话是不是有一种莫名的美感。Matplotlib就能画出这种风格的图表来!!当然不是那些小人什么的。
你需要做的就是在画图之前加上一行代码plt.xkcd(),比如画一个正弦曲线:
from numpy import linspace, sin import matplotlib.pyplot as plt plt.xkcd() plt.plot(sin(linspace(0, 10))) plt.title(‘Whoo Hoo!!!‘)
效果会是这样:
原本平整的图纸,像是被水浸泡过一样,变得扭曲。除此之外,它们还使用了,另外一种字体,叫做Humor Sans。
下面是干货时间到,如果你在标题里写入中文,你会发现中文的字体,还是你原来设置的,并没有配合图表进行改变,这也可以意料到,因为他们不可能为每一种文字找一种融洽的字体。
经过一番搜寻,发现方正卡通简体挺配的,于是安装到了系统里,却发现怎么也没法用这种字体。经过一番折腾发现,字体的名称只能是英文的,却不知道安装字体的英文名是什么,最后通过列出matplotlib所有支持的字体
sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])
反过来才找到,方正卡通简体正确的英文名字是FZKaTong-M19S。添加一行代码matplotlib.rc(‘font‘, **{‘family‘ : ‘FZKaTong-M19S‘})设置使用方正卡通简体就可以啦。
一切就绪,就等开画了,仍然是体育比赛的得分,这次是足球的
mean = sum(data)/len(data) data_range = (min(data), max(data)) poisson = stats.poisson(mean) x = range(data_range[0], data_range[1]+1) poisson_distri = poisson.pmf(x) plt.xkcd() plt.hist(data, normed=True ,bins=max(data)+1, range=(-0.5,max(data)+0.5), color=‘green‘, label=‘实际分布‘)
matplotlib.rc(‘font‘, **{‘family‘ : ‘FZKaTong-M19S‘}) plt.plot(poisson_distri, ‘o-‘, label=‘标准泊松分布‘) plt.xlabel(‘一场比赛的进球数目‘) plt.title(‘1998-2014年世界杯初赛进球数目的分布‘) plt.legend()
足球比赛的得分,近似服从泊松分布
是不是很赞。除此之外,在xkcd模式下,箭头等其他的一些部件也有所改变
快去探索一番吧!Matplotlib还专门为xkcd模式准备了一个官网。
标签:
原文地址:http://www.cnblogs.com/meelo/p/4463531.html