专栏名称: Python爱好者社区
人生苦短,我用Python。分享Python相关的技术文章、工具资源、精选课程、视频教程、热点资讯、学习资料等。每天自动更新和推送。
目录
相关文章推荐
Python爱好者社区  ·  史上最强!PINN杀疯了 ·  昨天  
Python爱好者社区  ·  DeepSeek创始人梁文锋个人履历 ·  3 天前  
Python爱好者社区  ·  离谱!下载DeepSeek最高判刑20年? ·  2 天前  
Python爱好者社区  ·  1885页的Python完全版电子书 ·  3 天前  
Python开发者  ·  o3-mini 碾压 DeepSeek ... ·  6 天前  
51好读  ›  专栏  ›  Python爱好者社区

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

Python爱好者社区  · 公众号  · Python  · 2017-08-07 17:06

正文

作者:王大伟

Python爱好者社区唯一小编

博客:https://ask.hellobi.com/blog/wangdawei


点击上图即可限时 半价 购买课程


前言

前文传送门:

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

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


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

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


环境

IDE : jupyter notebook

Anaconda 3.X


箱线图
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,并显示其前五行观察



df.plot.box()

注:绘制箱线图


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

箱线图解释如下图:



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

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

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

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



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


注:这里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()


注:使用和之前产生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')


注:在原有的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'])


注:这里传入两个分类依据,所以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()


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

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


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

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

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







请到「今天看啥」查看全文


推荐文章
Python爱好者社区  ·  史上最强!PINN杀疯了
昨天
Python爱好者社区  ·  DeepSeek创始人梁文锋个人履历
3 天前
Python爱好者社区  ·  离谱!下载DeepSeek最高判刑20年?
2 天前
Python爱好者社区  ·  1885页的Python完全版电子书
3 天前