今天这篇推文小编给大家介绍一些QQ图(Quantile-Quantile Plots) 的绘制方法,主要内容如下:
QQ图是用于验证一组数据是否符合正太分布,或者验证某两组数据是否来自同一分布情况,是一种散点图,通常情况下,其横坐标为标准正态分布的分位数,纵坐标为样本值。要利用QQ图判定测试样本数据是否近似于正态分布,只需看QQ图上的点是否近似地在一条直线附近,更多关于QQ图的含义理解,小伙伴们可自行搜索哈~~。QQ图样例如下(来源于网络):
QQ图样例参考
这里小编给大家推荐一个比较好的QQ图介绍视频资源,有条件的小伙伴可以看下哈,虽说是英文的,但是说的非常好,地址如下:https://www.youtube.com/watch?v=okjYjClSjOg。接下来,小编就汇总一下QQ图的R和Python绘制教程。
「样例一」:ggplot2绘制
library(tidyverse)
library(ggtext)
library(hrbrthemes)
library(wesanderson)
library(LaCroixColoR)
library(RColorBrewer)
library(qqplotr)
library(ggsci)
#构造数据
df <- data.frame(y = rt(200, df = 5))
#可视化绘制
ggplot(df, aes(sample=y))+
stat_qq(shape=21,fill="gray",size=4,colour="black",stroke=.5) +
stat_qq_line(color="red") +
labs(x = "Theoretical Quantiles", y = "Sample Quantiles",
title = "Example of <span style='color:#D20F26'>ggplot2::stat_qq function</span>",
subtitle = "processed charts with <span style='color:#1A73E8'>stat_qq()</span>",
caption = "Visualization by <span style='color:#0057FF'>DataCharm</span>") +
hrbrthemes::theme_ipsum(base_family = "Roboto Condensed") +
theme(
plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
size = 20, margin = margin(t = 1, b = 12)),
plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
plot.caption = element_markdown(face = 'bold',size = 12)
)
Example Of ggplot2::stat_qq()
「样例二」:R-qqplotr包绘制 这个R包是专门绘制QQ图的,这里小编简单介绍下常用方法,更多样例和语法请参考R-qqplotr包[1]。详细如下:
library(qqplotr)
set.seed(0)
smp <- data.frame(norm = rnorm(100))
ggplot(data = smp, mapping = aes(sample = norm)) +
stat_qq_band(alpha=.4) +
stat_qq_point(shape=21,size=4,fill="gray60",colour="black",stroke=.5) +
stat_qq_line(color="red") +
labs(x = "Theoretical Quantiles", y = "Sample Quantiles",
title = "Example of <span style='color:#D20F26'>qqplotr::stat_qq_point__* function</span>",
subtitle = "processed charts with <span style='color:#1A73E8'>stat_qq_point__*()</span>",
caption = "Visualization by <span style='color:#0057FF'>DataCharm</span>"
) +
hrbrthemes::theme_ipsum(base_family = "Roboto Condensed") +
theme(
plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
size = 20, margin = margin(t = 1, b = 12)),
plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
plot.caption = element_markdown(face = 'bold',size = 12)
)
Example01 Of qqplotr QQ charts
注意:qqplotr包提供了stat_qq_band() 函数用于绘制区间,使QQ图更加易于理解。
「多类别」:
ggplot(data = smp, mapping = aes(sample = norm)) +
geom_qq_band(bandType = "ks", mapping = aes(fill = "KS"), alpha = 0.5) +
geom_qq_band(bandType = "ts", mapping = aes(fill = "TS"), alpha = 0.5) +
geom_qq_band(bandType = "pointwise", mapping = aes(fill = "Normal"), alpha = 0.3) +
geom_qq_band(bandType = "boot", mapping = aes(fill = "Bootstrap"), alpha = 0.5) +
stat_qq_point(shape=21,size=4,fill="gray60",colour="black",stroke=.5) +
stat_qq_line() +
labs(x = "Theoretical Quantiles", y = "Sample Quantiles",
title = "Example of <span style='color:#D20F26'>qqplotr::stat__qq_point__* function</span>",
subtitle = "processed charts with <span style='color:#1A73E8'>stat__qq_point__*()</span>",
caption = "Visualization by <span style='color:#0057FF'>DataCharm</span>") +
ggsci::scale_fill_jco(name="Bandtype") +
hrbrthemes::theme_ipsum(base_family = "Roboto Condensed") +
theme(
plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
size = 20, margin = margin(t = 1, b = 12)),
plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
plot.caption = element_markdown(face = 'bold',size = 12),
)
Example02 Of qqplotr QQ charts
「分面绘制」:
data("barley", package = "lattice")
ggplot(data = barley, mapping = aes(sample = yield, color = site, fill = site)) +
stat_qq_band(alpha=0.5) +
stat_qq_line() +
stat_qq_point() +
ggsci::scale_color_nejm() +
ggsci::scale_fill_nejm() +
facet_wrap(~ site) +
labs(x = "Theoretical Quantiles", y = "Sample Quantiles",
title = "Example of <span style='color:#D20F26'>qqplotr::stat_qq_point__* function</span>",
subtitle = "processed charts with <span style='color:#1A73E8'>stat__qq_point__*()</span>",
caption = "Visualization by <span style='color:#0057FF'>DataCharm</span>") +
hrbrthemes::theme_ipsum(base_family = "Roboto Condensed") +
theme(
plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
size = 20, margin = margin(t = 1, b = 12)),
plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
plot.caption = element_markdown(face = 'bold',size = 12),
)
Example03 Of qqplotr QQ charts + facet_wrap()
更多详细例子和绘图参数,小伙伴们可去qqplotr官网进行查询。
Python 绘制QQ图主要借助其用于统计分析的statsmodels库和scipy库,样例如下:
「statsmodels库绘制」:
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = "Times New Roman"
# 构建数据
test = np.random.normal(0,1, 200)
# 开始绘图
fig,ax = plt.subplots(figsize=(6,5),dpi=100,)
ax.set_facecolor("white")
sm.qqplot(test, line='45',marker='.', markerfacecolor='gray', markeredgecolor='k',markeredgewidth=.5,
markersize=14,ax=ax)
ax.set_xlim((-3, 3.0))
ax.set_ylim((-3, 3.0))
ax.grid(linestyle="--",linewidth=.5,color="black")
ax.tick_params(direction='in',labelsize=13)
titlefontdict = {"size":17,"color":"k",'family':'Times New Roman'}
ax.set_title('Example Of QQ Plot In Python-Statsmodels Make',titlefontdict,pad=20)
ax.text(.82,.056,'\nVisualization by DataCharm',transform = ax.transAxes,
ha='center', va='center',fontsize = 10,color='black')
Example Of QQ Plot In Python-Statsmodels Make
注意:sm.qqplot()在绘制QQ图时,其定制化绘制的灵活性较大,可以对散点样式、颜色、大小、粗细等属性进行设置。更多内容可参考:gofplots.qqplot()[2]
「scipy库绘制」:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
fig,ax = plt.subplots(figsize=(6,5),dpi=100)
stats.probplot(test, plot=ax)
ax.set_xlim((-3, 3.0))
ax.set_ylim((-3, 3.0))
ax.grid(linestyle="--",linewidth=.5,color="black")
ax.tick_params(direction='in',labelsize=13)
titlefontdict = {"size":17,"color":"k",'family':'Times New Roman'}
ax.set_title('Example Of QQ Plot In Python-scipy Made',titlefontdict,pad=20)
ax.text(.82,.056,'\nVisualization by DataCharm',transform = ax.transAxes,
ha='center', va='center',fontsize = 10,color='black')
plt.savefig(r'G:\DataCharm\可视化包介绍(绘制)\QQ图绘制\QQ charts in Python-scipy.png',width=6,height=5.5,
dpi=900,bbox_inches='tight',facecolor='white')
Example Of QQ Plot In Python-scipy Made
可以看出:stats.probplot()绘制QQ图,其在定制化操作上有所不足,无法较灵活的设置颜色、边框宽度等属性。更多详细内容可参考:scipy.stats.probplot()[3]
以上就是就是对QQ图绘制的R和Python绘制方法介绍,详细内容小伙伴可参考文末参考资料~~
以上就是今天推文的内容,可能还有很多优秀的方法小编没有介绍到的,小伙伴们可自行探索哈,希望本期的推文内容可以帮助到你~~
[1]R-qqplotr包官网: https://aloy.github.io/qqplotr/。
[2]statsmodels.graphics.gofplots.qqplot: https://www.statsmodels.org/stable/generated/statsmodels.graphics.gofplots.qqplot.html。
[3]scipy.stats.probplot(): https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.probplot.html。