PyMC3 traceplot not displaying

Hi, I’m new here and also to PyMC3, so I hope this is an appropriate post.

I am trying to get the PyMC3 examples from Osvaldo Martin’s Bayesian Analysis with Python working. While the following code using matplotlib works fine (i.e. a chart is displayed):

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats


def posterior_grid(grid_points=100, heads=6, tosses=9):
    """
    A grid implementation for the coin-flip problem
    """
    grid = np.linspace(0, 1, grid_points)
    prior = 0.5 - abs(grid - 0.5)
    likelihood = stats.binom.pmf(heads, tosses, grid)
    unstd_posterior = likelihood * prior
    posterior = unstd_posterior / unstd_posterior.sum()
    return grid, posterior


if __name__ == "__main__":
    points = 100
    h, n = 1, 4
    grid, posterior = posterior_grid(points, h, n)
    plt.plot(grid, posterior, 'o-', label='heads = {}\ntosses = {}'.format(h, n))
    plt.xlabel(r'$\theta$')
    plt.legend(loc=0)
    plt.show()

…I cannot get the following - which uses PyMC3’s traceplot - to display a chart:

import pymc3 as pm
import numpy as np
import scipy.stats as stats

if __name__ == "__main__":

    np.random.seed(123)
    n_experiments = 4
    theta_real = 0.35
    data = stats.bernoulli.rvs(p=theta_real, size=n_experiments)
    print(data)

    with pm.Model() as our_first_model:
        theta = pm.Beta('theta', alpha=1, beta=1)
        y = pm.Bernoulli('y', p=theta, observed=data)
        start = pm.find_MAP()
        step = pm.Metropolis()
        trace = pm.sample(1000, step=step, start=start)

    burnin = 100
    chain = trace[burnin:]
    pm.traceplot(chain, lines={'theta':theta_real});

The code runs and exits fine, but no chart is displayed.

I have tried in IntelliJ IDEA with the Python plugin, from an Anaconda console window for my root environment, and from IPython.

In IPython, I get the following output on the console:

Out[3]:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x0000024BDD622F60>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x0000024BDD667208>]], dtype=object)

…so obviously something is happening. But how can I display the results as a chart?

I have also tried the exact library versions listed in the book with Python 3.5, but still no traceplot chart:

  • Ipython 5.0
  • NumPy 1.11.1
  • SciPy 0.18.1
  • Pandas 0.18.1
  • Matplotlib 1.5.3
  • Seaborn 0.7.1
  • PyMC3 3.0

If you are on a console or terminal, you need to added plt.show() to display the figure. If you are on a ipython notebook, you need to add %pylab inline in code at the very beginning of the notebook.

Thanks for the reply. Further Googling got me to the answer during the day (UK time yesterday).

plt.show() also works with IntelliJ IDEA / PyCharm (and of course, you’ll need a import matplotlib.pyplot as plt at the top). For IPython, invoking from the command line with ipython --pylab auto also seems to work.