大家好,我是早起。
在我之前发的箱线图图鉴中,有读者表示看不懂箱线图。
今天本文就通过下面这张图简单讲一下箱线图
没错,这张图也是用matplotlib一点一点的绘制出来的,所以顺便巩固一下matplotlib绘图的综合应用。
箱线图怎么看?
箱线图也是常用的统计图表了,主要就是为了展示中位数、分位数、极值等等统计指标,用于揭示数据间离散程度、异常值、分布差异等等。
关于箱线图的指标具体怎么计算的,本文不做详细解释,毕竟能够很轻松的百度查到,简单说下怎么看,比如我们看如下的箱线图(来自进阶箱线图,点击图片直达图鉴!)
可以看到,第2、3组数据离散程度比较大(大部分数据在上下四分位箱体内),同时第2、3组数据大部分集中在均值/中位数右侧。而其余几组数据则比较集中,并且第1、2、5、6、7、8组数据存在异常值等等
这个异常值,并不是说出现异常的数值,而是从统计学的角度,我们将偏离大多数点位置的值视为异常值!
比如在我们举例绘制的正态分布例子中就将0.7%比例的数据是作为异常值,而下四分位数值到上四分位数值占了50%,最小值到下四分位数占总体的24.65%,上四分位数到最大值也占了总体24.65%。
下面早起手把手教你如何绘制这样一张图,巩固matplotlib绘图知识!
导入
首先第一步,我们导入要用到的库
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
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));
绘制正态分布
现在设置上图的x轴y轴标签,并画出正态分布图
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]
修饰正态分布
现在对正态分布图进行修饰,包括修改竖线、填充颜色、标记数据、调整标题等操作如下
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);
添加箱线图
接下来我们在第二个区域添加箱线图,绘制箱线图使用.boxplot,具体参数解释在箱线图图鉴1中有详细介绍,并使用同样的方法进行修饰
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时可以借用seaborn主题、样式,这里我们修改一下绘图风格和配色,三行代码就能为matplotlib更改风格!
palette=sns.color_palette(“hls”, 8)
sns.set_palette(palette,4)
到这里,我想你应该体会到一副看上去还不错的图是如何使用matplotlib进行绘制,这次我就不提供源码,所有代码都在上面给出了并且加上了注释。如果感兴趣的话,你可以手动按照顺序复制、执行、体会、理解!注意在本文,我没有对部分操作进行详细解释(往期文章实在说了太多次了),有任何不理解的地方,可以在菜单栏点击组件设置文档查看!
本文的分享就到这里,有任何问题可以给我留言,如果喜欢本文的话请点赞、在看、转发支持一下早起,谢谢!
看到这里,就点个赞吧,如果你也对Python/数据可视化感兴趣,可以关注我的公众号「可视化图鉴」来发现更多精彩文章!
如若转载,请注明出处:https://www.po4.xyz/46195.html