回复“ 资源 ”即可获赠Python学习资料
对于从网页上爬取下来的数据很多很杂乱,我们需要进行数据可视化,pandas除了数据处理还可以进行数据可视化展示,这里我们简单说明一下pandas绘制常见图形的一些API:由于现在针对数据可视化有很多库,matplotlib、seaborn、pyecharts等等,使用pandas绘图其实并不多,这里做一个简单展示。
目录:
柱状图 普通柱图首先我们打开excel数据文件,如下图所示:
Field:专业;Number:对应专业学生数量,根据两列数据绘制简单柱图:
import pandas as pdimport matplotlib.pyplot as plt data = pd.read_excel('Students.xlsx' ) # pd绘图 data.sort_values(by='Number' ,inplace=True ,ascending=False ) data.plot.bar(x='Field' ,y='Number' ,title='National Students Field' ) plt.tight_layout() plt.show()
解释说明:
data.sort_values(by='Number',inplace=True,ascending=False):按照Number数量大小排序,inplace = True:在当前数据文件上修改,不生成新的数据文件,ascending = False:降序排序; bar() 绘制柱图的函数,x、y分别指定下,x、y轴的序列; tight_layout() 使得整个图紧凑显示,不然x轴的文字由于太长会被挡住; 结果如下所示:
分组柱图首先我们还是查看数据文件:students02.xlsx
给出了2016、2017两年的学生数量,由此考虑绘制分组柱状图:
import pandas as pdimport matplotlib.pyplot as plt data = pd.read_excel('Students02.xlsx' ) data.sort_values(by='2017' ,inplace=True ,ascending=False ) data.plot.bar(x='Field' ,y=['2016' ,'2017' ],color=['red' ,'orange' ]) plt.title('National Students Number' ,fontsize=16 ,fontweight='bold' ) plt.xlabel('Field' ,fontweight='bold' ) plt.ylabel('Number' ,fontweight='bold' )# x轴刻度偏转 ax = plt.gca() ax.set_xticklabels(data['Field' ],rotation=45 ,ha='right' ) print(data) f = plt.gcf() f.subplots_adjust(left=0.2 ,bottom=0.4 )# plt.tight_layout() plt.show()
解释说明:
bar() 绘制柱图的函数,x、y分别指定下,x、y轴的序列,但是由于分组柱图y轴不再是一个序列,而是由两个(或多个)序列组成的列表; plt.title() 设置标题,当然也可以在bar() 函数里面设置; plt.gca() 获得x轴的文字,下一列重新设置x轴的文字,并且把文字旋转45°,ha='right':依照右点为中心进行水平对齐; plt.gcf() 拿到绘制的图形对象,设置留白区域,left=0.2(左侧留白20%),bottom=0.4,底部留白40%; 结果如下:
叠加柱图有的时候可能不只有两组数据,要观察多组数据的数量占比,可以采用叠加柱图:
import matplotlib.pyplot as plt import pandas as pd data = pd.read_excel('./excel文件/Users.xlsx' ) # 这里数据文件就不再展示 data['total' ] = data['Oct' ] + data['Nov' ] + data['Dec' ] data.sort_values(by='total' ,inplace=True ,ascending=False )# data.plot.bar(x='Name',y=['Oct','Nov','Dec'],stacked=True,title='Users Behavior') 竖直 data.plot.barh(x='Name' ,y=['Oct' ,'Nov' ,'Dec' ],stacked=True ,title='Users Behavior' ) #水平 如果需要改变顺序,将ascending=true plt.tight_layout() plt.show()
结果如下图所示:
饼图首先我们先查看一下数据文件,如下所示:
给出了2016,2017年来自不同国家的学生数量排名(rank);
由此绘制饼图:
import pandas as pdimport matplotlib.pyplot as plt plt.figure(figsize=(12 ,8 ),dpi=100 ) students = pd.read_excel('./bin_Students.xlsx' , index_col='From' ) students['2017' ].plot.pie(fontsize=8 ,counterclock=False ) plt.title('Source of International Students' , fontsize=16 , fontweight='bold' ) plt.ylabel('2017' , fontsize=12 , fontweight='bold' ) plt.show()
解释说明:
figsize:设置图片大小,dpi:设置图片分辨率; pie()函数绘制饼图的的api函数,counterclock =False:这个参数设置饼图占比元素的环绕方向,false变送逆时针; 结果如下图所示:
折线图由于文件数据过多,这里不做展示;简言之就是四个区域的不同周期的销售状况
绘图代码:
import pandas as pd import matplotlib.pyplot as plt data = pd.read_excel('./excel文件/Orders.xlsx' ,index_col='Week' ) data.plot.area(y=['Accessories' ,'Bikes' ,'Clothing' ,'Components' ]) #叠加区域图 plt.title('Sale Week Trend' ,fontsize=14 ,fontweight='bold' ) plt.ylabel('Total' ,fontsize=10 ,fontweight='bold' ) plt.xticks(data.index,fontsize=5 ) plt.show()
结果如下:
由于后面集中图形使用较少,这里不再展示数据文件,直接上代码:
散点图import matplotlib.pyplot as plt import pandas as pd data = pd.read_excel('./excel文件/home_data.xlsx' ,index_col='id' ) data.plot.scatter(x='sqft_living' ,y='price' ) # 房子面积 价位 plt.show()
结果如下:
该图形绘制的是在某地区房子价位与房子面积的分布关系;
直方图import matplotlib.pyplot as plt import pandas as pd data = pd.read_excel('./excel文件/home_data.xlsx' ) data['sqft_living' ].plot.hist(bins=60 ) # bins 表示柱子的数量 plt.xticks(range(0 ,max(data['sqft_living' ]),500 ),rotation=90 ,fontsize=6 ) plt.show()
结果如下:
该图表示某地区房子的价位的分布情况。
总结以上就是使用pandas结合matplotlib绘制一些基本常用图形的例子,当然了例子是固定的,图形是灵活的,我们还是要根据不同的数据表,结合不同的现实状况,绘制不同的图形达到我们的目的。