在Excel内置Python中,使用pandas包封装的绘图功能也可以实现数据可视化。该绘图功能也是在Matplotlib包的基础上开发而成,一些Matplotlib包的语法可以直接使用。本节介绍用pandas包绘制柱状图、面积图和直方图。
柱状图
图7-25所示工作表中,单元格A7在Python模式下,在公式栏输入下面的代码,绘制复合柱状图:
df=xl("A1:C5",headers=True)
df.plot.bar()
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)
在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域B7:E17,绘图效果如图7-25中左图所示。可见,使用pandas包绘制复合柱状图比用Matplotlib包绘制方便得多。
单元格F7在Python模式下,在公式栏输入下面的代码,绘制堆叠柱状图:
df=xl("A1:C5",headers=True)
df.plot.bar(stacked=True)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)
在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域G7:J17,绘图效果如图7-25中右图所示。代码中给bar函数指定stacked参数的值为True,实现堆叠柱状图的绘制。
图7-25 用pandas包绘制柱状图
面积图
图7-26所示工作表中,单元格A7在Python模式下,在公式栏输入下面的代码,绘制面积图:
df=xl("A1:C5",headers=True)
df.plot.area(stacked=False)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)
在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域B7:E17,绘图效果如图7-26中左图所示。默认时,多组数据绘制面积图会绘制堆叠面积图。代码中将area函数的stacked参数的值设置为False,取消堆叠。所以单独绘制各组数据的简单面积图,并半透明显示。
单元格F7在Python模式下,在公式栏输入下面的代码,绘制堆叠面积图:
df=xl("A1:C5",headers=True)
df.plot.area()
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)
在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域G7:J17,绘图效果如图7-25中右图所示。
图7-26 用pandas包绘制面积图
直方图
图7-27所示工作表中,A-C列为汽车相关指标的实测数据,对这三组数据进行标准化,标准化数据放在D-F列,利用它们绘制复合直方图。
单元格D1在Python模式下,在公式栏输入下面的代码,对A列数据进行标准化:
df=xl("A1:A407",headers=True)
std_mpg=((df['MPG']-df['MPG'].mean())/df['MPG'].std()).round(4)
在公式栏中单击Ctrl+Enter键,返回一个Series对象。以Excel值的方式显示数据。标准化后的数据保存在变量std_mpg中。
单元格E1在Python模式下,在公式栏输入下面的代码,对B列数据进行标准化:
df=xl("B1:B407",headers=True)
std_acc=((df['Acceleration']-df['Acceleration'].mean())/df['Acceleration'].std()).round(4)
在公式栏中单击Ctrl+Enter键,返回一个Series对象。以Excel值的方式显示数据。标准化后的数据保存在变量std_acc中。
单元格F1在Python模式下,在公式栏输入下面的代码,对C列数据进行标准化:
df=xl("C1:C407",headers=True)
std_dis=((df['Displacement']-f['Displacement'].mean())/df['Displacement'].std()).round(4)
在公式栏中单击Ctrl+Enter键,返回一个Series对象。以Excel值的方式显示数据。标准化后的数据保存在变量std_dis中。
然后利用标准化后的数据绘制复合直方图。
单元格G2在Python模式下,在公式栏输入下面的代码:
df2=pd.concat([std_mpg,std_acc,std_dis],axis=1)
df2.plot.hist(alpha=0.5)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)
plt.ylabel('Frequency',fontsize=16)
在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域H2:L13,绘图效果如图7-27中上图所示。代码中设置hist函数的alpha参数的值为0.5,生成半透明的复合直方图。
单元格G14在Python模式下,在公式栏输入下面的代码:
df2=pd.concat([std_mpg,std_acc,std_dis],axis=1)
df2.plot.hist(stacked=True,bins=20)
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
plt.legend(fontsize=16)
plt.ylabel('Frequency',fontsize=16)
在公式栏中单击Ctrl+Enter键,返回一个Image对象。显示该对象,合并单元格区域H14:L26,绘图效果如图7-27中下图所示。代码中设置hist函数的stacked参数的值为True,绘制堆叠直方图,设置bins参数的值为20,直方图共有20个分箱或柱形。
图7-27 用pandas包绘制直方图