Plotting 2D Kernel Density Estimation with Python

后端 未结 2 1929
死守一世寂寞
死守一世寂寞 2020-12-25 13:39

I would like to plot a 2D kernel density estimation. I find the seaborn package very useful here. However, after searching for a long time, I couldn\'t figure out how to mak

相关标签:
2条回答
  • 2020-12-25 14:07

    Here is a solution using scipy and matplotlib only :

    import numpy as np
    import matplotlib.pyplot as pl
    import scipy.stats as st
    
    data = np.random.multivariate_normal((0, 0), [[0.8, 0.05], [0.05, 0.7]], 100)
    x = data[:, 0]
    y = data[:, 1]
    xmin, xmax = -3, 3
    ymin, ymax = -3, 3
    
    # Peform the kernel density estimate
    xx, yy = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
    positions = np.vstack([xx.ravel(), yy.ravel()])
    values = np.vstack([x, y])
    kernel = st.gaussian_kde(values)
    f = np.reshape(kernel(positions).T, xx.shape)
    
    fig = pl.figure()
    ax = fig.gca()
    ax.set_xlim(xmin, xmax)
    ax.set_ylim(ymin, ymax)
    # Contourf plot
    cfset = ax.contourf(xx, yy, f, cmap='Blues')
    ## Or kernel density estimate plot instead of the contourf plot
    #ax.imshow(np.rot90(f), cmap='Blues', extent=[xmin, xmax, ymin, ymax])
    # Contour plot
    cset = ax.contour(xx, yy, f, colors='k')
    # Label plot
    ax.clabel(cset, inline=1, fontsize=10)
    ax.set_xlabel('Y1')
    ax.set_ylabel('Y0')
    
    pl.show()
    

    The previous code gives the following result :

    plot_kernel_density.jpg

    which has a non-transparent x-axis, a non-transparent y-axis and values of the density on the contour. Is this the expected result ?

    0 讨论(0)
  • 2020-12-25 14:08

    Did you check these examples?

    http://matplotlib.org/examples/pylab_examples/contour_demo.html

    http://matplotlib.org/examples/pylab_examples/contourf_demo.html

    Scroll down to see more images.

    0 讨论(0)
提交回复
热议问题