用Pandas作图分类:python2014-07-1112:2032人阅读评论(0)收藏举报目录(?)[+]来自:关于Pandas的基本使用介绍,请查看另一篇博文:Python中的结构化数据分析利器-Pandas简介推荐使用ipython的pylab模式,如果要在ipythonnotebook中嵌入图片,则还需要指定pylab=inline。ipython--pylab##ipython的pylab模式ipythonnotebook--pylab=inline##notebook的inline模式importpandasaspd基本画图命令Pandas通过整合matplotlib的相关功能实现了基于DataFrame的一些作图功能。下面的数据是每年美国男女出生数据:url='=pd.read_table(url,sep='')present.shape(63,3)present.columnsIndex([u'year',u'boys',u'girls'],dtype='object')可以看到这个数据集共有63条记录,共有三个字段:Year,boys,girls。为了简化计算将year作为索引。present_year=present.set_index('year')plot是画图的最主要方法,Series和DataFrame都有plot方法。可以这样看一下男生出生比例的趋势图:present_year['boys'].plot()plt.legend(loc='best')matplotlib.legend.Legendat0x10b9c7610这是Series上的plot方法,通过DataFrame的plot方法,你可以将男生和女生出生数量的趋势图画在一起。present_year.plot()matplotlib.axes.AxesSubplotat0x108ce4910present_year.girls.plot(color='g')present_year.boys.plot(color='b')plt.legend(loc='best')matplotlib.legend.Legendat0x10999e510可以看到DataFrame提供plot方法与在多个Series调用多次plot方法的效果是一致。present_year[:10].plot(kind='bar')matplotlib.axes.AxesSubplotat0x10ab31390plot默认生成是曲线图,你可以通过kind参数生成其他的图形,可选的值为:line,bar,barh,kde,density,scatter。present_year[:10].plot(kind='bar')matplotlib.axes.AxesSubplotat0x10bb35890present_year[:10].plot(kind='barh')matplotlib.axes.AxesSubplotat0x10eb01890如果你需要累积的柱状图,则只需要指定stacked=True。present_year[:10].plot(kind='bar',stacked=True)matplotlib.axes.AxesSubplotat0x10bbdb3d0制作相对的累积柱状图,需要一点小技巧。首先需要计算每一行的汇总值,可以在DataFrame上直接调用sum方法,参数为1,表示计算行的汇总。默认为0,表示计算列的汇总。present_year.sum(1)[:5]year1940236039919412513427194228089961943293686019442794800dtype:int64有了每一行的汇总值之后,再用每个元素除以对应行的汇总值就可以得出需要的数据。这里可以使用DataFrame的div函数,同样要指定axis的值为0。present_year.div(present_year.sum(1),axis=0)[:10].plot(kind='barh',stacked=True)matplotlib.axes.AxesSubplotat0x113223290散点图和相关plot也可以画出散点图。使用kind='scatter',x和y指定x轴和y轴使用的字段。present_year.plot(x='boys',y='girls',kind='scatter')matplotlib.axes.AxesSubplotat0x1141c9810再来载入一下鸢尾花数据。url_2='=pd.read_csv(url_2)iris.head(5)SepalLengthSepalWidthPetalLengthPetalWidthName05.13.51.40.2Iris-setosa14.93.01.40.2Iris-setosa24.73.21.30.2Iris-setosa34.63.11.50.2Iris-setosa45.03.61.40.2Iris-setosa5rows×5columnsiris.corr()SepalLengthSepalWidthPetalLengthPetalWidthSepalLength1.000000-0.1093690.8717540.817954SepalWidth-0.1093691.000000-0.420516-0.356544PetalLength0.871754-0.4205161.0000000.962757PetalWidth0.817954-0.3565440.9627571.0000004rows×4columnsfrompandas.tools.plottingimportscatter_matrixscatter_matrix(iris,alpha=0.2,figsize=(6,6),diagonal='kde')array([[matplotlib.axes.AxesSubplotobjectat0x1141e5290,matplotlib.axes.AxesSubplotobjectat0x114313610,matplotlib.axes.AxesSubplotobjectat0x11433fbd0,matplotlib.axes.AxesSubplotobjectat0x114328e10],[matplotlib.axes.AxesSubplotobjectat0x11411f350,matplotlib.axes.AxesSubplotobjectat0x114198690,matplotlib.axes.AxesSubplotobjectat0x114181b90,matplotlib.axes.AxesSubplotobjectat0x11436eb90],[matplotlib.axes.AxesSubplotobjectat0x11438ced0,matplotlib.axes.AxesSubplotobjectat0x114378310,matplotlib.axes.AxesSubplotobjectat0x1143e34d0,matplotlib.axes.AxesSubplotobjectat0x114d0a810],[matplotlib.axes.AxesSubplotobjectat0x1143ecd50,matplotlib.axes.AxesSubplotobjectat0x114d40e90,matplotlib.axes.AxesSubplotobjectat0x114d63210,matplotlib.axes.AxesSubplotobjectat0x114d4a2d0]],dtype=object)箱图DataFrame提供了boxplot方法可以用来画箱图。iris.boxplot(){'boxes':[matplotlib.lines.Line2Dat0x1141439d0,matplotlib.lines.Line2Dat0x11416c1d0,matplotlib.lines.Line2Dat0x1141559d0,matplotlib.lines.Line2Dat0x11414b210],'caps':[matplotlib.lines.Line2Dat0x11416af90,matplotlib.lines.Line2Dat0x1141434d0,matplotlib.lines.Line2Dat0x114172790,matplotlib.lines.Line2Dat0x114172c90,matplotlib.lines.Line2Dat0x114153f90,matplotlib.lines.Line2Dat0x1141554d0,matplotlib.lines.Line2Dat0x11414f7d0,matplotlib.lines.Line2Dat0x11414fcd0],'fliers':[matplotlib.lines.Line2Dat0x114145410,matplotlib.lines.Line2Dat0x114145b50,matplotlib.lines.Line2Dat0x11416cbd0,matplotlib.lines.Line2Dat0x1141530d0,matplotlib.lines.Line2Dat0x114151410,matplotlib.lines.Line2Dat0x114151b90,matplotlib.lines.Line2Dat0x11414bc10,matplotlib.lines.Line2Dat0x1141743d0],'medians':[matplotlib.lines.Line2Dat0x114143ed0,matplotlib.lines.Line2Dat0x11416c6d0,matplotlib.lines.Line2Dat0x114155ed0,matplotlib.lines.Line2Dat0x11414b710],'whiskers':[matplotlib.lines.Line2Dat0x11416a7d0,matplotlib.lines.Line2Dat0x11416aa10,matplotlib.lines.Line2Dat0x114172050,matplotlib.lines.Line2Dat0x114172290,matplotlib.lines.Line2Dat0x114153590,matplotlib.lines.Line2Dat0x114153a90,matplotlib.lines.Line2Dat0x11414f090,matplotlib.lines.Line2Dat0x11414f2d0]}通过by参数可以计算不同分组情况下,各个字段的箱图。iris.boxplot(by='Name',figsize=(8,8))array([[matplotli