导语:为什么用pandas绘图
matplotlib虽然功能强大,但是matplotlib相对而言较为底层,画图时步骤较为繁琐,比较麻烦,因为要画一张完整的图表,需要实现很多的基本组件,比如图像类型、刻度、标题、图例、注解等等。目前有很多的开源框架所实现的绘图功能是基于matplotlib的,pandas便是其中之一,对于pandas数据,直接使用pandas本身实现的绘图方法比matplotlib更加方便简单。
pandas的两类基本数据结构series和dataframe都提供了一个统一的接口plot(),即data.plot()或者data.plot.bar/box...即可。
kind:画图的种类,可以是 line(默认)、bar、barh、kde。
‘bar’ or ‘barh’ for bar plots,bar表示垂直柱状图,barh表示水平柱状图
‘hist’ for histogram
‘box’ for boxplot
‘kde’ or ‘density’ for density plots。即Kernel Density Estimate 和密度估计,常常与hist一起混合使用。
‘area’ for area plots
‘scatter’ for scatter plots
‘hexbin’ for hexagonal bin plots
‘pie’ for pie plots
kind:“line”、"bar"、"barh"、"kde"
ax:要在其上进行绘制的matplotlib.subplot对象,如果没有,则使用默认的subplot对象。
figsize:图像尺寸
use_index:True(默认),False。表示默认情况下,会将series和dataframe的index传给matplotlib,用已绘制X轴。
title:标题
grid:网格
legend:图例
style:绘图的风格,如‘ko--’
logx:在X轴上使用对数标尺
logy: 在Y轴上使用对数标尺
loglog:
xticks=None,用做x刻度的值
yticks=None,用做Y轴刻度的值
xlim=None, X轴的界限如【0,10】
ylim=None,Y轴的界限
rot=None, 旋转刻度标签 0-360
fontsize=None,
colormap=None,
table=False,
yerr=None,
xerr=None,
label=None,
注:pandas绘图时会默认索引作为x轴
导入数据
1 importmatplotlib.pyplot as plt2 %matplotlib inline3 plt.rcParams['font.sans-serif'] = ['SimHei']#显示中文
4 plt.rcParams['axes.unicode_minus'] = False#显示负号
5 importpandas as pd6 importnumpy as np7 from pandas importSeries,DataFrame8 test=pd.read_excel("/Users/yaozhilin/Downloads/exercise.xlsx",sep="t")9 test.head(5)#显示前五行
•离散型数据的可视化
~饼图
1 fig= plt.figure(figsize=(6,6))#调整图的大小
2 t=test["所属区域"].value_counts()3 t.plot.pie(autopct='%.1f%%',explode = [0,0.1,0,0])
比较matplotlib:
1 plt.pie(t.values,labels=t.index,autopct='%.1f%%',explode = [0,0.1,0,0])
相比pandas默认索引为labels,values为数值。
~条形图
1 fig=plt.figure(figsize=(7,7))2 tb=test.groupby(["所属区域"]).agg({"数量":np.mean})3 tb.plot(kind="bar")4 plt.grid(linestyle="-.", axis='y', alpha=0.4)#设置横向网格
双条形图
1 fig=plt.figure(figsize=(7,7))2 tb=test.groupby(["所属区域"]).agg({"成本":np.mean,"金额":np.mean})3 tb.plot(kind="barh")
堆积图
data.plot(kind="barh",stacked=True)
1 fig=plt.figure(figsize=(7,7))2 tb=test.groupby(["所属区域"]).agg({"成本":np.mean,"金额":np.mean})3 tb.plot(kind="barh",stacked=True)4 plt.grid(linestyle="-.", axis='y', alpha=0.4)#设置横向网格
•连续性数据的可视化
~箱型图
常用于数据清洗查看异常值
1 t=test["数量"].dropna()#切记要去除na
2 t.plot(kind="box")
~直方图:data.hist(bin=)
计算连续变量的频率
1 test["金额"].hist(bins=20,alpha=0.3,color='g')#bins表示x分为多少份
~密度图:kde
1 test["金额"].hist(bins=20,alpha=0.3,color='g',density=True)2 test["金额"].plot(kind="kde")
~折线图
常用于随时间变化的连续数据
比如探究test中数量随时间变化趋势
1 tl=test.groupby("订购日期").agg({"数量":np.mean})2 tl.plot(kind="line",style="bo--")
~面积图 :data.plot.area
1 fig,axes=plt.subplots(1,2)2 ta=test.groupby(["订购日期"]).agg({"成本":np.mean,"金额":np.mean})3 ta.plot(ax=axes[0])#第一个画布
4 ta=test.groupby(["订购日期"]).agg({"成本":np.mean,"金额":np.mean})5 ta.plot.area(ax=axes[1])
•关系型数据的可视化
~散点图:data.plot.scatter
1 test.plot.scatter(x="金额",y="数量")