Reputation: 6915
I have some predefined matplotlibrc
style which I use for my plots. Below is a sample image styled with it
On the other hand, I find seaborn's sns.set(font_scale=1.25)
quite handy, which allows me to quickly control font sizes.
Yet, while changing the font size it also applies the default seaborn style to my plot, so matplotlib's defaults are overwritten.
I tried sns.set(style=None, font_scale=1.25)
instead but line colors and font family of axis labels are still changed.
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#sns.set(style=None, font_scale=1.25)
fig = plt.figure(figsize=(3.4, 2.1), frameon=False)
fig.tight_layout()
x = np.linspace(0, 2, 500)
ax = fig.add_subplot(111)
ax.set_xlabel('xlabel, some units')
ax.set_ylabel('ylabel, some units')
ax.plot(x, x**0.5, label='$x^{0.5}$')
ax.plot(x, x**1.5, label='$x^{1.5}$')
ax.legend()
fig.savefig('output.png')
plt.close(fig)
Upvotes: 4
Views: 3390
Reputation: 40707
One possibility is to rite your own function that reproduces what seaborn is doing "under the hood"
This is adapted from seaborn's code on github:
def scale_fonts(font_scale):
font_keys = ["axes.labelsize", "axes.titlesize", "legend.fontsize",
"xtick.labelsize", "ytick.labelsize", "font.size"]
font_dict = {k: matplotlib.rcParams[k] * font_scale for k in font_keys}
matplotlib.rcParams.update(font_dict)
You have to make sure the values for the font_keys
above are in numeric (e.g. 12 and not "medium") in your rc-file, but otherwise, that's all there is to it.
Upvotes: 2
Reputation: 339340
You are looking for set_context
:
sns.set_context("notebook", font_scale=1.25)
This will scale the fonts with respect to the predefined "notebook"
style, which seems closest to the matplotlib defaults.
A comparisson:
Default plot:
With sns.set_context(font_scale=1.25)
:
With sns.set_context("notebook", font_scale=1.25)
:
Upvotes: 4