全局更改matplotlib默认样式

3
我有一个问题:我如何在matplotlib中使用默认样式(因为我喜欢它),但只更改单个参数?这里有一个例子: 使用默认的matplotlib样式或“经典”样式,我可以通过更新rcParams全局更改字体大小。
import matplotlib.pyplot as plt
plt.style.use('classic')
plt.rcParams.update({'font.size': 18.0})

x = [0, 1, 2, 3]
y = [0, 1, 4, 9]

fig, ax0 = plt.subplots()
ax0.plot(x, y)
ax0.set_xlabel('data x')
ax0.set_ylabel('data y')
plt.show()

输出

如果我在开始时选择不同的默认样式:

import matplotlib.pyplot as plt
plt.style.use('seaborn')
plt.rcParams.update({'font.size': 18.0})

x = [0, 1, 2, 3]
y = [0, 1, 4, 9]

fig, ax0 = plt.subplots()
ax0.plot(x, y)
ax0.set_xlabel('data x')
ax0.set_ylabel('data y')
plt.show()

字体大小仍保持默认值,但实际情况并非如此;

plt.rcParams.update({'font.size': 18.0})

很像font.size这一行不存在。 现在一个简单的解决方案是定义一个特定字号的全局变量,并手动将其添加到绘图中的每个元素中,但这对我来说听起来不太聪明。是否有其他想法来全局修改字体大小?它是否实际上是可能的,还是我只需要处理它并创建自己的matplotlib风格文件? 编辑: 经过仔细思考后,遵循DavidG的评论,我尝试使用不同的样式:ggplot、fivethirtyeight甚至seaborn-dark,我的代码可以正常工作(如我所期望的)。因此问题仅与seaborn样式相关(我可能选择得太倒霉了)...

你也安装了seaborn模块吗? - DavidG
实际上不是这样,我只是没有想到它会有关联,因为我认为所有的信息都包含在matplotlib样式库中。 - mmonti
我知道如何使用seaborn来做到这一点,但是似乎无法仅使用matplotlib来实现。我将发布一个使用seaborn的答案,即使它不完全符合您的要求,因为它可能会帮助其他已安装该模块的人。 - DavidG
你不需要安装seaborn来使用seaborn风格;同样,使用ggplot风格也不必安装ggplot。这些风格完全是写在它们所引用的单个.mplstyle文件中的。 - ImportanceOfBeingErnest
1个回答

3

刻度标签的大小由 xtick.labelsizeytick.labelsize rcParams 决定。
如果你打印输出它们,你会看到它们在 seaborn 风格中被设为 10 (pt)。因此,如果你将它们改为 18,你就可以得到所需的图表。

import matplotlib.pyplot as plt
plt.style.use('seaborn')
plt.rcParams.update({'font.size': 18,
                     'xtick.labelsize' : 18,
                     'ytick.labelsize' : 18})

# ....

enter image description here

如您所见,坐标轴标签仍然很小。这是因为我们没有设置axes.labelsize参数。

那么为什么只设置'font.size'就可以使seaborn-dark按预期工作呢?
答案是有两种指定字体大小的方法。一种是像上面那样使用绝对点数,另一种是使用相对值。这些相对值包括xx-small、x-small、small、medium、large、x-large、xx-large、larger或smaller。这些值是相对于在font.size中指定的大小而言的。

seaborn-dark样式(以及其他许多样式)中,labelsize是使用其中一个相对值来设置的。在这种情况下,它是medium,这意味着确切地使用了font.size

您可以检查matplotlib\lib\matplotlib\mpl-data\stylelib文件夹中的样式,直接查看它们如何指定相应的参数以及它们之间的差异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接