PP图,QQ 图,及 python 画图

统计学中有时会用到 PP 图 或 QQ 图,用来看样本数据是否服从某一特定分布。

若 PP 或 QQ 图中的点基本落在一条 45度 的线上,则说明服从特定分布。

一般的步骤为:

  1. 将样本数据从小到大排序,假设排序后的样本数据为 x 1 x_1 x1 x 2 x_2 x2 … \dots x n x_n xn
  2. 对于 n n n 个样本数据,对应 n n n 个分位数。分位数的取值规则不一样,一个比较简答的规则是:第 k k k 个分位数的取值为 Q k = ( k − 0.5 ) / n Q_k=(k-0.5)/n Qk=(k0.5)/n
  3. 横坐标为: x 1 x_1 x1 x 2 x_2 x2 … \dots x n x_n xn,纵坐标为:所判断分布的累计分布函数在分位数的逆函数值 F − ( Q k ) F^-(Q_k) F(Qk),则为 QQ 图;若横坐标为: F ( x 1 ) F(x_1) F(x1) F ( x 2 ) F(x_2) F(x2) … \dots F ( x n ) F(x_n) F(xn),纵坐标为: Q k Q_k Qk,则为 PP 图。

PP 图与 QQ 图的功能基本一样,我见用 QQ 图的比较多。因为分位数的取值规则不一样,因此 QQ 图可能画的不太一样。

下面以正态分布的随机样本为例,用 python 画一下图形,专门的 QQ 图也可以调用 statsmodels 中的 ProbPlot 函数 (不是 scipy 中的 probplot,因为 scipy 中的 probplot 画的直线是拟合直线,并不是45度斜线)。

import scipy.stats as st
import matplotlib.pyplot as plt
import numpy as np

import statsmodels.api as sm
probplot = sm.ProbPlot(samples, dist = st.norm, loc = 5, scale = 2)
probplot.qqplot(line='45')

n = 100
samples = st.norm.rvs(loc = 5, scale = 2, size = n)
samples_sort = sorted(samples)

x_labels_q = samples_sort
y_labels_q = st.norm.ppf(x_labels_p, loc = 5, scale = 2)
plt.scatter(x_labels_q, y_labels_q)
plt.title('QQ plot for normal distribution samle')
plt.show()

x_labels_p = np.arange(1/(2*n), 1, 1/n)
y_labels_p = st.norm.cdf(samples_sort, loc = 5, scale = 2)
plt.scatter(x_labels_p, y_labels_p)
plt.title('PP plot for normal distribution samle')
plt.show()






显示图形:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由于 ProbPlot 的分位数取值规则不同,从图形上看,ProbPlot 的 QQ 图与自己画的 QQ 图略微不一样。

转载于个人公众号:Python 统计分析与数据科学

在这里插入图片描述

  • 10
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在Python画图加上注,可以使用PIL库和pyplot库。首先,导入所需的库。然后,读取片并设置字体样式和大小。接下来,设置字体颜色和片的分辨率。最后,使用draw.text()函数在指定位置写入注。保存并显示片即可。 以下是一个示例代码: ```python from PIL import Image, ImageDraw, ImageFont import matplotlib.pyplot as plt # 打开片 img = Image.open('beauty.jpg') draw = ImageDraw.Draw(img) # 设置字体和大小 myfont = ImageFont.truetype('C:/windows/fonts/Arial.ttf', size=80) # 设置字体颜色 fillcolor = "#CC3299" # 读取片的size,也就是宽度和高度 width, height = img.size # 在(30,30)的位置开始写注 draw.text((30, 30), 'Hello', font=myfont, fill=fillcolor) # 保存片 img.save('result.jpg') # 显示片 plt.imshow(img) plt.show() ``` 这段代码会在片的左上角位置(30,30)处添加一个大小为80的粉红色的注"Hello"。你可以根据需要修改位置、字体大小、颜色等参数。 #### 引用[.reference_title] - *1* *2* [用Python片上添加注释信息](https://blog.csdn.net/qq_42257666/article/details/122135600)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python 画图 例添加字体](https://blog.csdn.net/qq_40037127/article/details/125888130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态与习惯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值