Mod*_*rat 2 python plot matplotlib
我正在使用Anaconda 2.7,我的fill_between()尝试也变得毫无结果.我不确定我是否错过了一个包或者我的绘图语法是否抛出python ...
这是我的代码:
from scipy import stats
import matplotlib.pyplot as plt
from numpy import linspace
alpha_A = 11
beta_A = 41
alpha_B = 3
beta_B = 3
x = linspace(0,1,num = 1000)
postA = stats.beta(alpha_A, beta_A).pdf(x)
postB = stats.beta(alpha_B, beta_B).pdf(x)
plt.figure(2, figsize = (6,4))
plt.plot(postA, color = 'r', label = "A: Beta(" + str(alpha_A) + ',' + str(beta_A) + ')')
plt.plot(postB, color = 'b',label = "B: Beta(" + str(alpha_B) + ',' + str(beta_B) + ')')
plt.legend(loc = "best", frameon = False)
plt.fill_between(x, postA, facecolor = "red") # <---- not working
frame1 = plt.gca()
frame1.axes.get_xaxis().set_ticks([])
ax = plt.gca()
ax.set_xticks([0,200,400,600,800,1000])
ax.set_xticklabels( ['0.0','0.2','0.4','0.6','0.8','1.0']) # https://scipy-lectures.github.io/intro/matplotlib/matplotlib.html#setting-tick-labels
ax.set_title("Posterior Distributions")
Run Code Online (Sandbox Code Playgroud)
这给了我这张图,其中没有出现红色填充: 
jrj*_*rjc 11
它实际上是有效的,如果你缩放你的绘图的左侧(你可以在你显示的图像上看到它,垂直线上升到7).
那么,为什么呢?
这是因为你的情节在x轴上达到1000,你要求将它填充到1(max(x)).
2解决方案:
快速的一个:
你替换这一行:
plt.fill_between(x, postA, facecolor = "red")
Run Code Online (Sandbox Code Playgroud)
通过这个
plt.fill_between(range(len(x)), postA, facecolor = "red")
Run Code Online (Sandbox Code Playgroud)
干净的一个:
代码的第二部分变为:
fig = plt.figure(figsize = (6,4))
ax = fig.add_subplot(111)
ax.plot(x, postA, color = 'r', label = "A: Beta(" + str(alpha_A) + ',' + str(beta_A) + ')')
ax.plot(x, postB, color = 'b',label = "B: Beta(" + str(alpha_B) + ',' + str(beta_B) + ')')
ax.legend(loc = "best", frameon = False)
ax.fill_between(x, postA, facecolor = "red")
ax.set_title("Posterior Distributions")
Run Code Online (Sandbox Code Playgroud)
在这里你给出的图中的x值为x,而不是len(postA),如果你只提供Y值.所以你将直接拥有正确的x-ticks.
这里的结果是干净的解决方案:

希望这可以帮助.