数据可视化-Python之Matplotlib

来源:互联网 发布:淘宝天猫积分怎么获得 编辑:程序博客网 时间:2024/05/16 05:19

数据可视化可以说是数据挖掘与结果展示很有力的工具。

程序绘图可以得到比较个性化的图像,而且易于大量生产大量的图像。但是对于绘图来书,最为重要的是之前额数据预处理。个人比较喜欢的绘图工具平台有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 pltimport matplotlib.path as mpathimport matplotlib.patches as mpatcheswith 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():语句里就好了


0 0
原创粉丝点击