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

发布时间:2024-04-07 13:01

参考书目:《深入浅出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() # 六边形箱体图,或简称六边形图


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

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


折线图 plot.line

基础用法

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

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

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第1张图片

 其他参数

#Series 索引为 x 轴,值为 y 轴, 值为非数字的会报错:
df[:5].Q1.plot()

#也可以指定 x 轴和 y 轴:
df[:5].plot(x='name', y='Q1')
df[:5].plot('name', ['Q1', 'Q2']) # 指定多条

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

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第2张图片


饼图plot.line

基础用法

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第3张图片

 #DataFrame 需要指定 y 值:

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第4张图片

 子图

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

 Pandas数据分析27——pandas画各类图形以及用法参数详解_第5张图片

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

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

 #其他常用参数如下:

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


柱状图 plot.bar

#基础用法

#DataFrame 可以直接调用 plot.bar() 生成折线图,与折线图类似,x 轴为索引,其他数字类型的列为 y 轴上的条形。

df.plot.bar()
df.plot.barh() # 横向
df[:5].plot.bar(x='name', y='Q4') # 指定xy轴
df[:5].plot.bar('name', ['Q1', 'Q2']) # 指定xy轴

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

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第6张图片

 #堆叠

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第7张图片#可以方便看总分

#barh 横向

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

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第8张图片

#子图

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第9张图片


直方图 plot.hist

基础用法

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第10张图片

 #单个变量

df2.A.plot.hist()

Pandas数据分析27——pandas画各类图形以及用法参数详解_第11张图片

 #堆叠

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第12张图片

子图

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

df2.hist(alpha=0.5)

Pandas数据分析27——pandas画各类图形以及用法参数详解_第13张图片

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

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第14张图片

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

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

#例子

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

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第15张图片#一个是均匀分布  两个就是类似正态分布


 箱形图 plot.box

#基本用法

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第16张图片

 #子图

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

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第17张图片

 #配色

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

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第18张图片

 #其他参数

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第19张图片


面积图 plot.area

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第20张图片

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

df.plot.area(stacked=False)

Pandas数据分析27——pandas画各类图形以及用法参数详解_第21张图片

 #指定轴

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


散点图plot.scatter()

基本用法

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第22张图片

#多组数据

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第23张图片

 #点的颜色

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第24张图片

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

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第25张图片第一条运行结果

 #色阶栏 

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第26张图片

#点大小

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

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


六边形分箱图 plot.hexbin

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

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

Pandas数据分析27——pandas画各类图形以及用法参数详解_第28张图片


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

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

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

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号