您的位置:首页 > 编程语言 > Python开发

数据可视化-Python之Matplotlib

2014-03-12 20:31 1166 查看
数据可视化可以说是数据挖掘与结果展示很有力的工具。

程序绘图可以得到比较个性化的图像,而且易于大量生产大量的图像。但是对于绘图来书,最为重要的是之前额数据预处理。个人比较喜欢的绘图工具平台有R语言的ggplot2以及Python的matplotlib,R语言比python还要简洁,产生图像也鞥各位方便,绘图库很多,很多地图可视化也是轻而易举的实现。然而R语言针对大数据的处理效率不足,python可以很好的弥补这一点,一般大量数据我都是在python下处理然后用csv格式数据导入到R平台,然后绘图。

今天尝试了一下matplotlib,这个绘图库很想Maltab的绘图库,学习的话就是这个教程:http://reverland.org/python/2012/09/07/matplotlib-tutorial/

然后就是阅读了几篇网上的博客:

昨天帮一个同学做一个简单的分组柱状图:

#-------------------------------------------------------------
def covinience_bar_plot(plotData,title):

n_groups = 12
fig, ax = plt.subplots()
index = np.arange(n_groups)
bar_width = 0.1

opacity = 0.7
error_config = {'ecolor': '0.3'}
filterByProvince=[u'AnHui',u'HeNan',u'HuNan',u'JiangXi',u'ShanDong',u'ShanXi',u'HuBei',u'ChongQing']
color=['#145214','#666633','#CC3300','#CCFF66','#FF6600',
'#CC66FF','#3366FF','#0099CC']
i=0

plt.xlim(-0.5, index.max()*1.1)
for xx,yy,province in zip(range(1,9),color,filterByProvince):

rects1 = plt.bar(index+bar_width*i, plotData[:,xx], bar_width,
alpha=opacity,
color=yy,
error_kw=error_config)
rects1.set_label(province)

for x,y in zip(index+bar_width*i, plotData[:,xx]):
plt.text(x+0.06, y+3, '%.0f' % y,fontsize=3, ha='center', va= 'bottom')
i+=1

plt.xlabel('Month')
plt.ylabel('Num')

#plt.xticks( range(1,13) )
plt.title(title)
plt.xlim(-0.5, index.max()*1.1)
mark=range(1,13)
plt.xticks(index + 4*bar_width, mark)
plt.legend()
plt.tight_layout()
plt.savefig(title+".png",dpi=700)
plt.show()


plotData是一个12*9的numpy数组,产生柱状图的思想是花多次bar,然后每次bar的位置向后位移一个一定的长度,



上面的图分辨率设置高一点能够放大浏览,但是在数据可视化里面这样的情况是不好的,最好进一步分组可视化,把很高的柱子在另一个图像中展示:
matplotlib里面有一个很有趣的东西就是这个xkcd的东东,它可以让你的绘制的图像像是涂鸦风格,像这样的或者这样的:





这个特性只有在版本1.3之后才被支持,由于之前一直使用spyder作为开发环境,所以matplotlib的版本比较低这个特性并不被支持,马上下载了新的版本的matplotlib然后安装,在把这个目录copy到我的spyder所使用的包目录下,然后把以前的matplotlib删除,ok
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.path as mpath
import matplotlib.patches as mpatches
with plt.xkcd():
fig, ax = plt.subplots()
Path = mpath.Path
path_data = [
(Path.MOVETO, (1.58, -2.57)),
(Path.CURVE4, (0.35, -1.1)),
(Path.CURVE4, (-1.75, 2.0)),
(Path.CURVE4, (0.375, 2.0)),
(Path.LINETO, (0.85, 1.15)),
(Path.CURVE4, (2.2, 3.2)),
(Path.CURVE4, (3, 0.05)),
(Path.CURVE4, (2.0, -0.5)),
(Path.CLOSEPOLY, (1.58, -2.57)),
]
codes, verts = zip(*path_data)
path = mpath.Path(verts, codes)
patch = mpatches.PathPatch(path, facecolor='r', alpha=0.5)
ax.add_patch(patch)

# plot control points and connecting lines
x, y = zip(*path.vertices)
line, = ax.plot(x, y, 'go-')

ax.grid()
ax.axis('equal')
plt.show()




xkcd使用很方便,只要把原先的绘图程序放进with xkcd():语句里就好了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: