pandas可视化(3)【官方文档解读】-- 箱线图

浏览: 4502

前言

前文传送门:

pandas可视化(1)【官方文档解读】--基础绘图

pandas可视化(2)【官方文档解读】-- 条形图、直方图


如绘图过程中,中文字体和负号显示有问题,可以参照如下链接修改配置参数设置正常显示:

https://www.joinquant.com/post/441


箱线图

import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
matplotlib.style.use('ggplot')#使用ggplot样式
%matplotlib inline

注:如前一章,先导入必要的模块和绘图的数据准备


df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.head()

注:使用numpy产生一个10行5列的矩阵,矩阵内的元素是随机产生的标准正态分布数字

然后将矩阵转为df,给这五列数据栏位命名为A、B、C、D、E,并显示其前五行观察

Clipboard Image.png


df.plot.box()

注:绘制箱线图

Clipboard Image.png

注:这里有A~E五个箱线图放在一张图,理解为5次试验,每次的即为其对应列中的十行(10个数字)的箱线图

箱线图解释如下图:

Clipboard Image.png


color = dict(boxes='DarkGreen', whiskers='DarkOrange',
medians='DarkBlue', caps='Gray')
df.plot.box(color=color, sym='r+')

注:绘制箱线图,这里增加了箱线图每部分线条颜色的设置,至于sym官方解释是:specify fliers style

直译为:指定传单风格,我们暂且可以认为是绘图的某种风格,我把这个参数去掉绘图发现没什么区别

如果有朋友理解,请留言评论赐教

Clipboard Image.png


df.plot.box(vert=False, positions=[1, 4, 5, 6, 8])

Clipboard Image.png

注:这里vert = False绘制水平箱线图,并且将幕布竖直方向分为8块等大小区域

将5个箱线图从下到上依次画在1、4、5、6、8五个位置


可以使用DataFrame.boxplot来绘制boxplot的界面

df = pd.DataFrame(np.random.rand(10,5))
plt.figure()
bp = df.boxplot()

Clipboard Image.png

注:使用和之前产生df一样的方法产生df,然后用df的boxplot方法画箱线图


df = pd.DataFrame(np.random.rand(10,2), columns=['Col1', 'Col2'] )
df['X'] = pd.Series(['A','A','A','A','A','B','B','B','B','B'])
plt.figure()
bp = df.boxplot(by='X')

Clipboard Image.png

注:在原有的df上增加一栏X,其中包含A,B两种分类,最后根据这种分类分别对col1和col2画箱线图


df = pd.DataFrame(np.random.rand(10,3), columns=['Col1', 'Col2', 'Col3'])
df['X'] = pd.Series(['A','A','A','A','A','B','B','B','B','B'])
df['Y'] = pd.Series(['A','B','A','B','A','B','A','B','A','B'])
plt.figure();
bp = df.boxplot(column=['Col1','Col2'], by=['X','Y'])

Clipboard Image.png

注:这里传入两个分类依据,所以2X2有四种分类组合


np.random.seed(1234)
df_box = pd.DataFrame(np.random.randn(50, 2))
df_box['g'] = np.random.choice(['A', 'B'], size=50)
df_box.loc[df_box['g'] == 'B', 1] += 3
bp = df_box.boxplot(by='g')

注:这段比较难理解,我们分步理解:

np.random.seed(1234)
df_box = pd.DataFrame(np.random.randn(50, 2))
df_box.head()

Clipboard Image.png

注:这里使用某种随机数种子产生器,随机产生一个50行2列的df

df_box['g'] = np.random.choice(['A', 'B'], size=50)
df_box.head()

Clipboard Image.png

注:然后加一栏g,随机分为A,B两类

df_box.loc[df_box['g'] == 'B', 1] += 3
df_box.head()

注:定位到所有g栏属于B的行和第二列(索引是1),将其加3

Clipboard Image.png

bp = df_box.boxplot(by='g')

Clipboard Image.png

注:最后按照g栏分类画图,像之前两张图一样


和以下绘图代码注意对比:

bp = df_box.groupby('g').boxplot()

Clipboard Image.png

注:by有分开的意思,groupby有整合的意思


pandas绘制箱线图到此结束

文中所写如有谬误请指出,感谢!

参考文献

http://pandas.pydata.org/pandas-docs/stable/visualization.html#

推荐 2
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

1 个评论

经过测试,发现df.plot.box(color=color, sym='r+') ,这里参数 sym是设置极端值的样式,本例中极端值以加号表示,不传入此参数时,默认是一个大句号

要回复文章请先登录注册