> The object-oriented API and its documentation have improved markedly over the years, I encourage you to give it a try. Most of the official documentation examples use it now. Yes, there are lots of examples out there using the pyplot interface still, but there is enough information on the OO API now that you can get by.
I agree. I used seaborn and matplotlib recently, and I was pleasantly surprised at both how much more consistent the API is and how much more comprehensive the documentation is. I dreaded using it at first but quickly became more accustomed.
> I have much stronger complaints about Seaborn and he will never find me recommending it to anyone.
Interesting, what are your pain points? For me, most of the time I start with seaborn, then modify the underlying matplotlib figure and axes for more customization; only rarely do I start with plt.subplots(). This gives me nice default styles while still allowing me to bend it to my will.
> start with seaborn, then modify the underlying matplotlib figure
Maybe this is the heart of my complaint: last I remember trying Seaborn, I found it hard to get access to the underlying Axes objects, and I also found it hard/impossible to add elements incrementally to an existing Axes. This might be a PEBCAK issue so I'm willing to try it again.
Understandable. A reason why I keep going back and forth between matplotlib and seaborn in the past is due to not knowing how to customize seaborn. Now that I know they are just regular matplotlib objects, it's very easy to mix and match them when seaborn is just too opinionated. You can read more here https://seaborn.pydata.org/tutorial/introduction.html#opinio...
Some examples I did recently: to set the layout engine of a seaborn plot
g = sns.relplot(df, x="value", y="y", col="variable", col_wrap=3)
g.figure.set_layout_engine("constrained")
g.figure.set_size_inches(16, 12)
Set the subplot titles
g = sns.displot(df, x="value", col="model")
g.figure.set_size_inches(16, 8)
for (ax, title) in zip(g.axes[0], titles):
ax.set_title(f"Title: {title}")
Multiple seaborn plots with two lines, error band, and scatter placed onto existing matplotlib subplots and custom colors
(You can also prepare the data in pandas the way seaborn like it and create faceted plot declaratively; the point is you can mix and match them freely and intuitively.)
I agree. I used seaborn and matplotlib recently, and I was pleasantly surprised at both how much more consistent the API is and how much more comprehensive the documentation is. I dreaded using it at first but quickly became more accustomed.
> I have much stronger complaints about Seaborn and he will never find me recommending it to anyone.
Interesting, what are your pain points? For me, most of the time I start with seaborn, then modify the underlying matplotlib figure and axes for more customization; only rarely do I start with plt.subplots(). This gives me nice default styles while still allowing me to bend it to my will.