我正在尝试设置一个alpha
值或其他方式使点在一个略微半透明的概率图中。这是我的代码。
import numpy as np
import pylab
import scipy.stats as stats
stats.probplot(x, dist=stats.gamma, sparams=(2.74,),plot=pylab)
这就是情节的样子。有关如何使点略微半透明的任何提示?我想出于美学目的这样做。
答案 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".
这是生成的图:
但就个人而言,我更愿意完全控制绘图。您可以为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>