使用matplotlib可以绘制各种各样的统计图,Pandas对matplotlib中的绘图方法进行了更高层的封装,使用起来更简单方便。
本文介绍Pandas中最基本的几种统计图的绘制方法,都非常常用。
本文使用的数据来源于网易财经,具体下载方法可以参考:Pandas知识点-DataFrame数据结构介绍
一、数据准备
数据文件是600519.csv,将此文件放到代码同级目录下,从文件中读取出数据。
为了使数据简洁一点,删除了一些列,设置“日期”为索引。
读取的原始数据如上图,本文基于这些数据来绘制统计图。
二、绘制折线图
Pandas中直接用Series对象或DataFrame对象调用plot()方法既可以绘制统计图。
kind: 使用kind参数指定图形的种类,line表示折线图,scatter表示散点图,bar表示柱状图,barh表示水平柱状图,hist表示直方图,pie表示饼图。这六种图形是最常用的图形,kind还支持其他图形,如box表示箱图等。
figsize: 使用figsize参数设置图形的大小,参数格式为(width, height)。
xlabel: 图形中会显示x轴的标签,可以使用xlabel参数修改或设置不显示,ylabel同理。
绘图时为了显示(show()方法)图形,会导入matplotlib.pyplot(as plt),可以使用plt对象的xticks()方法设置x轴刻度值,刻度值的倾斜度等,yticks()同理。可以使用text()方法添加图形中的数值标签。
kind参数默认为line,在绘制折线图时可以不指定kind参数。
linestyle: 使用linestyle参数设置折线图的线型,如'--'表示虚线,'-.'表示点线等。
marker: 使用marker参数设置折线图中数值点的样式,可以设置'o','*'等。
用DataFrame对象绘制折线图时,有多组数据,调用plot()方法会自动绘制出条折线图,并且自动设置好图例,比matplotlib方便很多。
三、绘制散点图
设置kind参数为scatter即可绘制散点图。
需要注意的是,在Pandas中,scatter不支持Series对象,只支持DataFrame对象,所以不能用Series对象绘制散点图。
绘制散点图时,通过x参数和y参数指定散点图的x轴数据和y轴数据。x和y都是DataFrame中的列标签,绘图时会根据列标签读取对应列的数据。
s: 使用s参数设置散点图中点的大小。
在Pandas中,绘制图形除了在plot()中指定kind参数外,还可以通过plot链式调用对应的方法,如plot.scatter()表示绘制散点图,后面绘制柱状图、直方图、饼图等也可以用链式调用的方式。
alpha: 设置图形显示的透明度,默认是None,可以传入0~1之间的数,值越小越透明。
marker参数与折线图中的用法相同,当设置成'*'时,显示的图形为五角星,当然还有很多其他的类型,可以参考matplotlib中的markers模块。
c: c参数用于设置散点图的颜色,可以指定一个颜色,也可以设置成一个数组或浮点数,如例子中使用numpy生成一个随机的数组,颜色随机从cmap中获取。
cmap: cmap参数用于设置点的颜色热力图,默认为image.cmap,可以设置成自己需要的颜色类型,参考matplotlib中的colors模块。只有当颜色参数c设置成数组或浮点数时,cmap参数才有用。
设置cmap参数后,会在图形右边生成一个柱状的颜色渐变图,就像下图这样。此时x轴的刻度值会被自动隐藏,将colorbar参数设置成False,可以隐藏颜色渐变图,重新显示x轴刻度值。
s参数也可以设置成一个数组,如例子中也是用numpy生成一个随机的数组,使每个点的大小不一样。
四、绘制柱状图
使用plot链式调用bar()方法,或在plot()中设置kind为bar,都可以绘制柱状图。
width: width参数用于设置柱状图的宽度,默认为0.8,可以根据需要进行修改。柱状图的每一组柱子是独立的,所以中间留好适合的间距会更好,width一般都设置成小于1。
bottom: bottom参数用于设置柱状图的底部位置(使柱状图“上浮”),默认为0,这个参数一般不需要修改,保持0即可。设置bottom参数后,柱状图会沿y轴方向上移,如设置为200,则柱状图上移200,从y坐标为200的地方开始绘制,柱状图的长度不发生改变。例子中的0.5相对于2000多的数值差距太大,看不出来。
color: color参数用于设置柱状图的颜色,前面折线图和散点图是用c参数,有一点差异。当柱状图中有多组数据时,最好传入一个数组,使不同组的柱状图颜色不一样,方便区分。
五、绘制水平柱状
使用plot链式调用barh()方法,或在plot()中设置kind为barh,就可以绘制水平柱状图了,参数用法与bar()方法一样。当然,在设置x轴刻度值,y轴刻度值,数值标签等时要注意方向的转换。
六、绘制直方图
使用plot链式调用hist()方法,或在plot()中设置kind为hist,都可以绘制直方图。这里要强调的是,直方图不是柱状图,两者的应用场景完全不同。
绘制直方图前,要根据数据的分布设置好适合的组距,然后根据组距计算出组数。
bins: bins参数用于设置直方图的组数,传入计算的组数。
如果需要显示图例,使用plt对象的legend()方法设置即可。
七、绘制饼图
使用plot链式调用pie()方法,或在plot()中设置kind为pie,都可以绘制饼图(扇形图)。
饼图是用于展示数据占比的,所以要先确定数据是否符合预期,如果不符合要先进行处理。
autopct: autopct参数用于设置饼图中的百分比格式,如'%.2f%%'表示保留两位小数。
colors: colors参数用于设置每个扇形的颜色,与数据分类一一对应,传入一个长度与数据分类数相等的列表。
explode: explode参数用于设置每个扇形到圆心的距离,传入一个长度与数据分类数相等的列表,默认每个扇形到圆心的距离都是0,将想要分离展示的扇形距离设置成一个适合的值,如0.1,即可将该部分突出展示。
pctdistance: pctdistance参数用于设置百分比显示离圆心的距离,默认值是0.6,可以按需将pctdistance参数增大或减小。
textprops: textprops参数用于设置标签和百分比的字体、大小等,传入一个字典。