• pandas绘图


    导语:为什么用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 import matplotlib.pyplot as plt
    2 %matplotlib inline
    3 plt.rcParams['font.sans-serif'] = ['SimHei']#显示中文
    4 plt.rcParams['axes.unicode_minus'] = False#显示负号
    5 import pandas as pd
    6 import numpy as np
    7 from pandas import Series,DataFrame 
    8 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="数量")

  • 相关阅读:
    242. Valid Anagram
    [wikioi]关押罪犯
    [wikioi]数的划分
    [wikioi]能量项链
    [wikioi]线段覆盖 2
    [wikioi]乌龟棋
    POJ1011 Sticks
    *[leetcode]Word Break II
    [leetcode]Word Break
    《高性能网站建设指南》笔记
  • 原文地址:https://www.cnblogs.com/ye20190812/p/13492052.html
Copyright © 2020-2023  润新知