一张图带你看懂箱线图,还能巩固matplotlib绘图流程!(箱线图怎么制作spss)

图图资源公众号引导关注.jpg
以上资料,免费领取,领取地址:https://vip.f6sj.com

大家好,我是早起。

在我之前发的箱线图图鉴中,有读者表示看不懂箱线图。

今天本文就通过下面这张图简单讲一下箱线图

一张图带你看懂箱线图,还能巩固matplotlib绘图流程!(箱线图怎么制作spss)

没错,这张图也是用matplotlib一点一点的绘制出来的,所以顺便巩固一下matplotlib绘图的综合应用。

箱线图怎么看?

箱线图也是常用的统计图表了,主要就是为了展示中位数、分位数、极值等等统计指标,用于揭示数据间离散程度、异常值、分布差异等等。

关于箱线图的指标具体怎么计算的,本文不做详细解释,毕竟能够很轻松的百度查到,简单说下怎么看,比如我们看如下的箱线图(来自进阶箱线图,点击图片直达图鉴!)

一张图带你看懂箱线图,还能巩固matplotlib绘图流程!(箱线图怎么制作spss)

可以看到,第2、3组数据离散程度比较大(大部分数据在上下四分位箱体内),同时第2、3组数据大部分集中在均值/中位数右侧。而其余几组数据则比较集中,并且第1、2、5、6、7、8组数据存在异常值等等

这个异常值,并不是说出现异常的数值,而是从统计学的角度,我们将偏离大多数点位置的值视为异常值!

比如在我们举例绘制的正态分布例子中就将0.7%比例的数据是作为异常值,而下四分位数值到上四分位数值占了50%,最小值到下四分位数占总体的24.65%,上四分位数到最大值也占了总体24.65%。

一张图带你看懂箱线图,还能巩固matplotlib绘图流程!(箱线图怎么制作spss)

下面早起手把手教你如何绘制这样一张图,巩固matplotlib绘图知识!

导入

首先第一步,我们导入要用到的库

import pandas as pd
import warnings
warnings.filterwarnings(“ignore”)
from scipy.integrate import quad
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
import seaborn as sns
plt.rcParams[font.sans-serif]=[Microsoft YaHei] #设置中文
%matplotlib inline

初始化

现在创建数据和画布,记得我们在原理篇说过,两张图就用ax.xxxx

x=np.linspace(-4, 4, num=100)
data=np.random.normal(size=(1900,1), loc=0, scale=1)
constant=1.0 / np.sqrt(2*np.pi)
pdf_normal_distribution=constant * np.exp((-x**2) / 2.0)

#得到上下两张图的画布
fig, (ax1,ax2)=plt.subplots(2,1,figsize=(10, 10));

一张图带你看懂箱线图,还能巩固matplotlib绘图流程!(箱线图怎么制作spss)

绘制正态分布

现在设置上图的x轴y轴标签,并画出正态分布图

xmajorLocator=MultipleLocator(1)
ax1.xaxis.set_major_locator(xmajorLocator)
ax1.set_xlim(-4,4)
ax1.set_xticklabels([0,-4σ,-3σ,-2σ,-1σ,0σ,1σ,2σ,3σ,4σ])
ax1.set_yticklabels([0.00,0.05,0.10,0.15,0.20,0.25,0.30,0.35,0.40],fontsize=14)
ax1.tick_params(labelsize=13)
ax1.plot(x, pdf_normal_distribution)

# 百分之25 是 Q1
# 百分之75 是 Q3
# 使用np.percentile去计算上下四分位数、最大最小值。
a=np.percentile(data, [25, 50, 75])
QMIN=a[0]-(a[2] – a[0])*1.5
QMAX=a[2]+(a[2] – a[0])*1.5
Q1=a[0]
Q3=a[2]

一张图带你看懂箱线图,还能巩固matplotlib绘图流程!(箱线图怎么制作spss)

修饰正态分布

现在对正态分布图进行修饰,包括修改竖线、填充颜色、标记数据、调整标题等操作如下

#画出上图的竖线
ax1.vlines(x=Q3,ymin=0,ymax=0.32)
ax1.vlines(x=Q1,ymin=0,ymax=0.32)
ax1.vlines(x=QMAX,ymin=0,ymax=0.014)
ax1.vlines(x=QMIN,ymin=0,ymax=0.014)

#填充
y_pdf=pdf_normal_distribution
ax1.fill_between(x,0,y_pdf,where=np.abs(x)<=np.abs(Q1) ,color=blue, alpha=.25)
ax1.fill_between(x,0,y_pdf,where=x>=Q3,color=red, alpha=.25)
ax1.fill_between(x,0,y_pdf,where=x<=-Q3,color=red, alpha=.25)
ax1.fill_between(x,0,y_pdf,where=x<=QMIN,color=green, alpha=.25)
ax1.fill_between(x,0,y_pdf,where=x>=QMAX,color=green, alpha=.25)

#为图片标上数字
ax1.text(-0.28, 0.05, 50%,fontsize=20)
ax1.text(0.99,0.05, 24.65%,fontsize=16)
ax1.text(-3.6,0.05, 0.35%,fontsize=16)
ax1.text(-1.8,0.05, 24.65%,fontsize=16)
ax1.text(3,0.05, 0.35%,fontsize=16)

# 调整标题,x轴y轴
ax1.set_ylim(0);
ax1.xaxis.grid(True, which=major,linestyle=(0,(8,4)))
ax1.set_title(正态分布, size=20);
ax1.set_ylabel(概率密度, size=20);

一张图带你看懂箱线图,还能巩固matplotlib绘图流程!(箱线图怎么制作spss)

添加箱线图

接下来我们在第二个区域添加箱线图,绘制箱线图使用.boxplot,具体参数解释在箱线图图鉴1中有详细介绍,并使用同样的方法进行修饰

labels=[data]
blue_diamond=dict(markerfacecolor=g, marker=D) #异常值
boxdata=ax2.boxplot(data,vert=False,labels=labels,flierprops=blue_diamond,patch_artist=True,boxprops={color:black,facecolor:yellow},medianprops={“linewidth”:2,color:red})
ax2.set_xlim(-4,4)
ax2.set_xticklabels([-4σ,-3σ,-2σ,-1σ,0σ,1σ,2σ,3σ,4σ])
ax2.xaxis.grid(True, which=major,linestyle=(0,(8,4)))
ax2.tick_params(labelsize=13)

#调整竖线
ax2.vlines(x=Q1,ymin=1,ymax=1.5)
ax2.vlines(x=Q3,ymin=1,ymax=1.5)
ax2.vlines(x=QMAX,ymin=1,ymax=1.5)
ax2.vlines(x=QMIN,ymin=1,ymax=1.5)

#标上文字
ax2.text(2.45,0.85, 最大值,fontsize=15)
ax2.text(0.675,0.85, 上四分位数,fontsize=15)
ax2.text(-0.25,0.85, 中位数,fontsize=15)
ax2.text(-1.52,0.85, 下四分位数,fontsize=15)
ax2.text(-2.95,0.85, 最小值,fontsize=15)
ax2.set_title(箱线图, size=16);
ax2.text(2.0,0.55, 公众号:可视化图鉴,fontsize=15,alpha=0.7)

一张图带你看懂箱线图,还能巩固matplotlib绘图流程!(箱线图怎么制作spss)

修改风格

还记得我在昨天说,用matplotlib时可以借用seaborn主题、样式,这里我们修改一下绘图风格和配色,三行代码就能为matplotlib更改风格!

sns.set()
palette=sns.color_palette(“hls”, 8)
sns.set_palette(palette,4)
一张图带你看懂箱线图,还能巩固matplotlib绘图流程!(箱线图怎么制作spss)

到这里,我想你应该体会到一副看上去还不错的图是如何使用matplotlib进行绘制,这次我就不提供源码,所有代码都在上面给出了并且加上了注释。如果感兴趣的话,你可以手动按照顺序复制、执行、体会、理解!注意在本文,我没有对部分操作进行详细解释(往期文章实在说了太多次了),有任何不理解的地方,可以在菜单栏点击组件设置文档查看!

本文的分享就到这里,有任何问题可以给我留言,如果喜欢本文的话请点赞、在看、转发支持一下早起,谢谢!

看到这里,就点个赞吧,如果你也对Python/数据可视化感兴趣,可以关注我的公众号「可视化图鉴」来发现更多精彩文章!

网站右侧边栏广告位.jpg
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630371849@qq.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.po4.xyz/46195.html