我是新来的,通常来自 R。我想用多行创建一个 QQ-Plot。
我有一个 beta 分布式数据集,我想为 beta 分布尝试不同的参数,并在一个QQ 图中比较它们以进行更好的比较。如果我尝试下面的代码,每个图都有相同的颜色,我得到了 3 条 QQ 线。有没有可能将这三个QQ图合二为一?
我希望你能解决我的问题
import scipy.stats as stats
import numpy
x=numpy.random.beta(2, 3, size=100)
stats.probplot(x, dist=stats.beta, sparams=(2,3),plot=plt,fit=False)
stats.probplot(x, dist=stats.beta, sparams=(1,2),plot=plt,fit=False)
stats.probplot(x, dist=stats.beta, sparams=(1,4),plot=plt,fit=False)
Run Code Online (Sandbox Code Playgroud)
善良的毕业生
好的,所以stats.probplot让我有点困惑。该文件明确指出:
probplot生成概率图,不应与 QQ 或 PP 图混淆。
然而,我能找到的所有来源都表明概率图是指 QQ 图或 PP 图。去搞清楚。
无论如何,就我而言,您生成的是QQ图。
在我看来, 的选项fit=False也stats.probplot被忽略,并且总是向数据添加回归线。
无论如何,为了得到你想要的,我们可以明确地创建一个 matplotlib 轴实例,并使用该get_lines方法删除不需要的回归线并更改标记颜色。
import scipy.stats as stats
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn')
x = numpy.random.beta(2, 3, size=100)
fig, ax = plt.subplots(1, 1, figsize=(6, 4))
stats.probplot(x, dist=stats.beta, sparams=(2,3), plot=plt, fit=False)
stats.probplot(x, dist=stats.beta, sparams=(1,2), plot=plt, fit=False)
stats.probplot(x, dist=stats.beta, sparams=(1,4), plot=plt, fit=False)
# Remove the regression lines
ax.get_lines()[1].remove()
ax.get_lines()[2].remove()
ax.get_lines()[3].remove()
# Change colour of scatter
ax.get_lines()[0].set_markerfacecolor('C0')
ax.get_lines()[1].set_markerfacecolor('C1')
ax.get_lines()[2].set_markerfacecolor('C2')
# Add on y=x line
ax.plot([0, 1], [0, 1], c='C3')
Run Code Online (Sandbox Code Playgroud)
这给了我以下内容,我认为这次确实是您想要的: