前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >超完整!QQ图绘制方法大汇总~~

超完整!QQ图绘制方法大汇总~~

作者头像
DataCharm
发布2022-02-17 15:05:27
发布2022-02-17 15:05:27
5K00
代码可运行
举报
运行总次数:0
代码可运行

今天这篇推文小编给大家介绍一些QQ图(Quantile-Quantile Plots) 的绘制方法,主要内容如下:

  • QQ图(Quantile-Quantile Plots)含义简单介绍
  • QQ图(Quantile-Quantile Plots)绘制方法

QQ图(Quantile-Quantile Plots)含义简单介绍

  • 「含义」:

QQ图是用于验证一组数据是否符合正太分布,或者验证某两组数据是否来自同一分布情况,是一种散点图,通常情况下,其横坐标为标准正态分布的分位数,纵坐标为样本值。要利用QQ图判定测试样本数据是否近似于正态分布,只需看QQ图上的点是否近似地在一条直线附近,更多关于QQ图的含义理解,小伙伴们可自行搜索哈~~。QQ图样例如下(来源于网络):

QQ图样例参考

这里小编给大家推荐一个比较好的QQ图介绍视频资源,有条件的小伙伴可以看下哈,虽说是英文的,但是说的非常好,地址如下:https://www.youtube.com/watch?v=okjYjClSjOg。接下来,小编就汇总一下QQ图的R和Python绘制教程。

QQ图(Quantile-Quantile Plots)绘制方法

QQ图R绘制教程

「样例一」:ggplot2绘制

代码语言:javascript
代码运行次数:0
复制
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]。详细如下:

代码语言:javascript
代码运行次数:0
复制
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图更加易于理解。

「多类别」:

代码语言:javascript
代码运行次数:0
复制
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

「分面绘制」:

代码语言:javascript
代码运行次数:0
复制
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官网进行查询。

QQ图Python绘制教程

Python 绘制QQ图主要借助其用于统计分析的statsmodels库和scipy库,样例如下:

「statsmodels库绘制」:

代码语言:javascript
代码运行次数:0
复制
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库绘制」:

代码语言:javascript
代码运行次数:0
复制
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。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • QQ图(Quantile-Quantile Plots)含义简单介绍
  • QQ图(Quantile-Quantile Plots)绘制方法
    • QQ图R绘制教程
    • QQ图Python绘制教程
  • 总结
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档