Python 为什么';你不能在这里工作吗?

Python 为什么';你不能在这里工作吗?,python,matplotlib,plot,Python,Matplotlib,Plot,我正在使用Anaconda 2.7,我的fill\u 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) po

我正在使用Anaconda 2.7,我的
fill\u 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")
来自scipy导入统计信息
将matplotlib.pyplot作为plt导入
从numpy导入linspace
αA=11
βA=41
阿尔法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.图(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.图例(loc=“best”,frameon=False)

plt.fill_-between(x,postA,facecolor=“red”)#如果放大绘图的左侧,它实际上可以工作(您可以在显示的图像上看到它,垂直线上升到7)

那为什么呢

这是因为你的绘图在x轴上上升到1000,你要求填充到1(最大(x))

2种解决方案:

快的一个:

替换此行:

plt.fill_between(x, postA, facecolor = "red")
通过这个

plt.fill_between(range(len(x)), postA, facecolor = "red")
干净的

代码的第二部分变成:

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")
在这里,您将绘图中的x值设为x,如果您只给出Y值,则不给出len(postA)。因此,您将直接获得正确的x记号

以下是清洁溶液的结果:


希望这能有所帮助。

您几乎不应该使用
设置\u xticklabels
否则如何让它显示从0到1的x轴?这是一个概率分布,因此我想告知定义它的范围。正如公认的答案所示,根据每个点的实际x值绘制。@tcaswell是否有更一般的理由不使用
setxticklabels
?或者就在这种情况下,他应该转换数据而不是滴答标签?@MaxNoe一般来说,如果你有定量滴答标签,你应该使用mpl,它有一个格式化滴答标签的基础设施。这样可以确保平移/缩放标签时保持正确。唯一的例外是如果你的标签是定性的。