在概率图中设置透明点

时间:2017-12-05 06:11:32

标签: python matplotlib plot scipy statistics

我正在尝试设置一个alpha值或其他方式使点在一个略微半透明的概率图中。这是我的代码。

import numpy as np 
import pylab 
import scipy.stats as stats
stats.probplot(x, dist=stats.gamma, sparams=(2.74,),plot=pylab)

这就是情节的样子。有关如何使点略微半透明的任何提示?我想出于美学目的这样做。

enter image description here

1 个答案:

答案 0 :(得分:2)

probplot函数不会公开API来自定义绘图。相反,您可以在probplot返回后使用其他matplotlib(即pylab)函数自定义绘图。这是你可以做到的一种方式(在ipython会话中)。

首先,进口:

In [102]: import numpy as np

In [103]: import pylab

In [104]: from scipy import stats

为情节生成一些数据:

In [105]: np.random.seed(8675309)

In [106]: x = np.random.gamma(3.0, scale=2.1, size=50)

生成概率图:

In [107]: pp = stats.probplot(x, dist=stats.gamma, sparams=(2.74,), plot=pylab)

设置当前轴中第一行的alpha值。这有点“危险”,因为它依赖于probplot在绘制红线之前绘制点。

In [108]: ax = pylab.gca()           # Get the current axes.

In [109]: line0 = ax.get_lines()[0]  # Get the first "line" in the axes.

In [110]: line0.set_alpha(0.25)      # Set the alpha for the "line".

这是生成的图:

plot

但就个人而言,我更愿意完全控制绘图。您可以为None参数传递plot以禁用自动生成绘图,并根据您的喜好使用matplotlib生成绘图:

In [185]: import matplotlib.pyplot as plt

In [186]: (osm, osr), (slope, intercept, r) = stats.probplot(x, dist=stats.gamma, sparams=(2.74,), plot=None)

In [187]: plt.plot(osm, osr, 'o', alpha=0.5)
Out[187]: [<matplotlib.lines.Line2D at 0x11469a6d8>]

In [188]: plt.plot(osm, slope*osm + intercept, 'k', alpha=0.5, linewidth=1)
Out[188]: [<matplotlib.lines.Line2D at 0x114695a90>]

In [189]: plt.grid(alpha=0.15)

In [190]: plt.xlabel('Theoretical Quantiles')
Out[190]: <matplotlib.text.Text at 0x11440bac8>

In [191]: plt.ylabel('Sample Quantiles')
Out[191]: <matplotlib.text.Text at 0x1142efda0>

plot