python-3.xmatplotlibseaborninsets

Is it possible to do a "zoom inset" using seaborn?


This example from matplotlib shows how to do an inset. However I am working with seaborn, specifically the kdeplot.

sns.kdeplot(y, label='default bw')
sns.kdeplot(y, bw=0.5, label="bw: 0.2", alpha=0.6)
sns.kdeplot(y, linestyle="--", bw=2, label="bw: 2", alpha=0.6)
sns.kdeplot(y, linestyle=":", bw=5, label="bw: 5", alpha=0.6)

It so happens that I have a lot of empty space on the right side of the graph and I would like to put a zoomed in inset there to clarify the lower x range. (If need be I could move the legend out as well, but that's besides the point)

enter image description here

Is it possible to do that with seaborn alone or do I have to forego the convenience of seaborn and convert the plots to matplotlib?


Solution

  • seaborn is just a wrapper around matplotlib, you do not have to chose one or the other. In your case, you can instruct sns.distplot() to use whathever Axes object you want using the ax= parameter

    Therefore:

    fig, ax = plt.subplots()
    sns.distplot(d, ax=ax)
    
    ax2 = plt.axes([0.2, 0.6, .2, .2], facecolor='y')
    sns.distplot(d, ax=ax2)
    ax2.set_title('zoom')
    ax2.set_xlim([0.9,1.])
    

    enter image description here