使用pylab绘制多个图形不起作用

时间:2016-09-07 15:35:17

标签: python matplotlib jupyter

我希望使用不同的n可视化Birthday Problem。我的目标是在同一图中绘制多个图,但它不起作用。它只绘制最后一个图并忽略其他图。我正在使用Jupyter笔记本。 这是我的代码:

from decimal import Decimal

def calc_p_distinct(n):
    p_distinct = numpy.arange(0, n.size, dtype=Decimal)
    for i in n:
        p_distinct[i] = Decimal(1.0)

    for i in n:
        for person in range(i):
            p_distinct[i] = Decimal(p_distinct[i]) * Decimal(((Decimal(365-person))/Decimal(365)))

    return p_distinct


# n is the number of people
n = numpy.arange(0, 20)
n2 = numpy.arange(0, 50)
n3 = numpy.arange(0, 100)

# plot the probability distribution
p_distinct = calc_p_distinct(n)
pylab.plot(n, p_distinct, 'r')

p_distinct2 = calc_p_distinct(n2)
pylab.plot(n2, p_distinct2, 'g')

p_distinct3 = calc_p_distinct(n3)
pylab.plot(n3, p_distinct3, 'b')

# set the labels of the axis and title
pylab.xlabel("n", fontsize=18)
pylab.ylabel("probability", fontsize=18)
pylab.title("birthday problem", fontsize=20)

# show grid
pylab.grid(True)

# show the plot
pylab.show()

当我用另一个内置函数(例如numpy.sin(n))替换其中一个calc_p_distinct()函数调用时,它会显示两个图形。因此,我得出结论,它必须与我的功能有关。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

这不是matplotlib的问题;所有的线都在那里,只是在彼此的顶部(这是完全合理的;对于100个人,只有前20个的概率与仅20个人的组相同)。

如果我用不同的线宽快速绘制它们:

enter image description here