• Pandas数据分析27——pandas画各类图形以及用法参数详解


    参考书目:《深入浅出Pandas:利用Python进行数据处理与分析》


    上一节讲解了pandas里面的对象的画图用法.plot()的参数。 这里是链接

    本次继续了解pandas的各种图形的画法和参数用法,

    pandas里面的图形类型有:

    df.plot.line() # 折线的全写方式

    df.plot.bar() # 柱状图

    df.plot.barh() # 横向柱状图 (条形图)

    df.plot.hist() # 直方图

    df.plot.box() # 箱形图

    df.plot.kde() # 核密度估计图

    df.plot.density() # 同

    df.plot.kde()

    df.plot.area() # 面积图

    df.plot.pie() # 饼图

    df.plot.scatter() # 散点图

    df.plot.hexbin() # 六边形箱体图,或简称六边形图


    下面一一介绍画法,首先还是导入包和读取案例数据。

    1. import numpy as np
    2. import pandas as pd
    3. import matplotlib.pyplot as plt
    4. plt.rcParams ['font.sans-serif'] ='SimHei' #显示中文
    5. plt.rcParams ['axes.unicode_minus']=False #显示负号
    6. data = 'https://www.gairuo.com/file/data/dataset/team.xlsx'
    7. df = pd.read_excel(data)


    折线图 plot.line

    基础用法

    1. df.plot()
    2. df.plot.line() # 全写方式

     #基于以上的逻辑,如果希望指定指定列为 x 轴,可以先将其设为索引:

    1. (df.loc[:10] # 取部分
    2. .set_index('name') # 设为索引
    3. .plot() # 折线图
    4. )

     其他参数

    1. #Series 索引为 x 轴,值为 y 轴, 值为非数字的会报错:
    2. df[:5].Q1.plot()
    3. #也可以指定 x 轴和 y 轴:
    4. df[:5].plot(x='name', y='Q1')
    5. df[:5].plot('name', ['Q1', 'Q2']) # 指定多条

    子图
    #如果一个折线图中有多条,可以使用 subplots 来将它们分开,形成多个子图。

    df[:10].plot.line(subplots=True)


    饼图plot.line

    基础用法

    1. s = pd.Series(3 * np.random.rand(4),index=['a', 'b', 'c', 'd'], name='series')
    2. s.plot.pie(figsize=(6, 6))

     #DataFrame 需要指定 y 值:

    1. df = pd.DataFrame(3 * np.random.rand(4, 2),index=['a', 'b', 'c', 'd'],columns=['x', 'y'])
    2. df.plot.pie(y='x')

     子图

    1. #DataFrame 可以传入 subplots=True 创建子图矩阵:
    2. df.plot.pie(subplots=True, figsize=(8, 4))

     

    图例
    #默认是有图例的,但饼图一般可以不需要图例, legend=False:

    df.plot.pie(subplots=True, figsize=(8, 4), legend=False)

     #其他常用参数如下:

    1. s.plot.pie(labels=['AA', 'BB', 'CC', 'DD'], # 标签,指定项目名称
    2. colors=['r', 'g', 'b', 'c'], # 指定颜色
    3. autopct='%.2f', # 数字格式
    4. fontsize=20, # 字体大小
    5. figsize=(6, 6) # 图大小
    6. )


    柱状图 plot.bar

    #基础用法

    1. #DataFrame 可以直接调用 plot.bar() 生成折线图,与折线图类似,x 轴为索引,其他数字类型的列为 y 轴上的条形。
    2. df.plot.bar()
    3. df.plot.barh() # 横向
    4. df[:5].plot.bar(x='name', y='Q4') # 指定xy轴
    5. df[:5].plot.bar('name', ['Q1', 'Q2']) # 指定xy轴

    #基于以上的逻辑,如果希望指定指定列为 x 轴,可以先将其设为索引:

    1. (df.loc[:4] # 取部分
    2.     .set_index('name') # 设为索引
    3.     .plot
    4.     .bar() # 柱状图
    5. )

     #堆叠

    1. #可以将同一索引的多个数据堆叠起来:
    2. (df.loc[:4] # 取部分
    3. .set_index('name') # 设为索引
    4. .plot
    5. .bar(stacked=True) # 柱状图, 堆叠
    6. )

    #可以方便看总分

    #barh 横向

    barh 可以将柱形横向,以下为一个横向+堆叠的例子:

    1. (
    2.     df.loc[:5] # 取部分
    3.     .set_index('name') # 设为索引
    4.     .plot
    5.     .barh(stacked=True) # 柱状图, 横向+堆叠
    6. )

    #子图

    1. #和折线图一样,也支持子图:
    2. df[:5].plot.bar(subplots=True)
    3. plt.tight_layout()


    直方图 plot.hist

    基础用法

    1. df2=pd.DataFrame(10 * np.random.randn(200, 4),columns=list('ABCD'))
    2. df2.plot.hist(alpha=0.5)

     #单个变量

    df2.A.plot.hist()

     #堆叠

    1. #可以堆叠,并指定分箱数量:
    2. df2.plot.hist(stacked=True, bins=20)

    子图

     #也可以直接使用 df.hist(alpha=0.5) 来绘制三个子图:

    df2.hist(alpha=0.5)

     #也可以单独绘制子图,指定分箱数量:

    1. df2.A.hist(bins=20, alpha=0.5)
    2. df2.hist('A', bins=20, alpha=0.5) # 同上

     #by 参数可以做分组,生成分组后的子图:

    1. df.Q1.hist(by=df.team)
    2. plt.tight_layout()

    #例子

    #当我们绘制骰子6000次时,我们期望每个值大约获得1000次。 但是,当我们绘制两个骰子并将结果相加时,分布将完全不同。 直方图说明了这些分布:

    1. df = pd.DataFrame(np.random.randint(1, 7, 6000),columns = ['one'])
    2. df['two'] = df['one'] + np.random.randint(1, 7, 6000)
    3. df.plot.hist(bins=12, alpha=0.5) #一个是均匀分布 两个就是类似正态分布

    #一个是均匀分布  两个就是类似正态分布


     箱形图 plot.box

    #基本用法

    1. df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
    2. df.plot.box() # 所有列
    3. df.A.plot.box() # 单个列
    4. df.boxplot() # 所有列
    5. df.boxplot('A') # 单个列

     #子图

    每条变量单独画一个箱线图

    1. df.plot.box(subplots=True)
    2. plt.tight_layout()

     #配色

    给图形中的一些元素指定颜色: 

    1. color = {'boxes': 'DarkGreen', # 箱体颜色
    2. 'whiskers': 'DarkOrange', # 连线颜色
    3. 'medians': 'DarkBlue', # 中位数颜色
    4. 'caps': 'Gray'} # 极值颜色
    5. df.plot.box(color=color, sym='r+')

     #其他参数

    1. #vert=False 将图形横向,positions 控制位置:
    2. df.plot.box(vert=False, positions=[1, 4, 5, 6, 8])


    面积图 plot.area

    1. df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
    2. df.a.plot.area() # 单个列
    3. df.plot.area()

     #堆积
    #要生成未堆积的图,请传入 stack = False,除非另有说明,否则Alpha值将设置为0.5。

    df.plot.area(stacked=False)

     #指定轴

    1. #可以指定 x 和 y 轴:
    2. df.plot.area(y='a')
    3. df.plot.area(y=['b', 'c'])
    4. df.plot.area(x='a')


    散点图plot.scatter()

    基本用法

    1. df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
    2. df.plot.scatter(x='a', y='b')

    #多组数据

    1. #要在单个轴上绘制多个列组,请重复指定目标轴的绘图方法。 建议指定颜色和标签关键字以区分每个组。
    2. ax = df.plot.scatter(x='a', y='b', color='DarkBlue', label='Group 1');
    3. df.plot.scatter(x='c', y='d', color='DarkGreen', label='Group 2', ax=ax);

     #点的颜色

    1. #c 参数可以指定点的颜色。#c支持数组,s为点的size
    2. df.plot.scatter(x='a', y='b', c='c', s=50)

     '''c 的取值可以是:
    字符,RGB 或者 RGBA 码, 如 ‘red’ , ‘#a98d19’
    序列,颜色列表,对应每个点的颜色
    列名称或位置,其值将用于根据颜色图为标记点着色'''

    1. df.plot.scatter(x='a', y='b', c=['green','yellow']*25, s=50)
    2. df.plot.scatter(x='a', y='b', c='DarkBlue')
    3. df.plot.scatter(x='a', y='b', c='c', colormap='viridis')

    第一条运行结果

     #色阶栏 

    1. #colorbar=True 在当前坐标区或图的右侧显示一个垂直颜色栏。颜色栏显示当前颜色图并指示数据值到颜色图的映射。
    2. df.plot.scatter(x='a', y='b', c='DarkBlue', colorbar=True)

    #点大小

    1. #s 可以指定点的大小:
    2. df.plot.scatter(x='a', y='b', s=50) # 同样大小
    3. df.plot.scatter(x='a', y='b', s=df['c'] * 200) #用c来指定大小,类似气泡图


    六边形分箱图 plot.hexbin

    它是一种比较特殊的图表,既是散点图的延伸,又兼具直方图和热力图的特征。 如果数据过于密集而无法单独绘制每个点,则六边形图可以替代散点图。

    1. df = pd.DataFrame(np.random.randn(1000, 2), columns=['a', 'b'])
    2. df['b'] = df['b'] + np.arange(1000)
    3. df.plot.hexbin(x='a', y='b', gridsize=20)
    4. #gridsize。 它控制x方向上的六边形数量,默认为100。较大的网格尺寸意味着更多更小的箱体


    差不多介绍完了,在实际做数据科学项目中,要注意分析的数据是做单变量还是多变量,以及如果是多变量的话,该怎么组合他们才能展示更好的效果。

    一般常用的数据分析图形是柱状图,直方图和箱线图。当然还有小提琴图,不过那个需要别的库来画。

    后面的面积图和六边形分相图不太常用。

  • 相关阅读:
    页面打印功能,单选框多选框选中后,打印时不显示选中效果
    介绍一下cpu主频越高越好吗?
    常用Git命令记录
    Function 源码解析与实践
    SpringMVC面试题
    常用的特征分析和特征工程
    Delaunay三角网
    卷积神经网络中的卷积核,卷积神经网络大小计算
    (c语言)用冒泡排序模拟实现qsort()函数交换整数
    安装配置NFS文件服务器及挂载
  • 原文地址:https://blog.csdn.net/weixin_46277779/article/details/126345053