Search code examples
pythonmatplotlibplotsubplotastronomy

Python Matplotlib How to create subplots?


I am having quite a bit of trouble understanding how to create good subplots. I want to create a figure that is similar to the one shown below. Does anyone know how I could set up a similar template as this?

enter image description here

Also, how would I include these points with error bars in the subplots? This is my code for the error bars:

mass, p, errp, errl = np.loadtxt('/Users/shawn/Desktop/vika1.dat', usecols = [0, 10, 11, 12], unpack = True)

plt.errorbar(mass, np.log10(p) - 4, yerr = [np.log10(p) - np.log10(p-errl), np.log10(p + errp) - np.log10(p)], fmt = 'o', markerfacecolor = 'w', markeredgecolor = 'k', ecolor = 'k')

Solution

  • You could use sharex and sharey to share the axes. The following will give the layout you want. You can then plot individual subplots using your specific plot funcitons.

    Updated complete code below

    import numpy as np
    import matplotlib.pyplot as plt
    fig, axes  = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
    X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
    C, S = np.cos(X), np.sin(X)
    
    axes[0,0].plot(X, C, color="blue", linewidth=1.0, linestyle="-")
    axes[0,1].plot(X, C, color="orange", linewidth=1.0, linestyle="-")
    axes[1,0].plot(X, C, color="green", linewidth=1.0, linestyle="-")
    axes[1,1].plot(X, C, color="red", linewidth=1.0, linestyle="-")
    plt.subplots_adjust(wspace=0,hspace=0)
    plt.show()
    

    Can't understand why someone has downvoted me for the initial answer...

    The below lines would prune the min value for both x and y axes thereby avoiding label overlaps

    from matplotlib.ticker import MaxNLocator
    axes[1,1].yaxis.set_major_locator(MaxNLocator(prune='lower'))
    axes[1,1].xaxis.set_major_locator(MaxNLocator(prune='lower'))