仅为一个值更改轴标签字体

Change axis label font for one value only

条形图上的特定标签比其他标签长得多,因此我想在该特定标签上使用 "condensed" 字体:

我怎样才能只为有问题的标签使用替代字体? 机器安装了 "Ubuntu" 字体系列,它有一个非常好的压缩变体非常适合这种情况。将压缩变体应用于所有标签看起来很糟糕,因此我宁愿将其限制为仅一行长行。

代码与此并不完全不同:

#!/usr/bin/python3

from matplotlib import pyplot
import matplotlib
import pylab

matplotlib.rcParams['font.family'] = 'ubuntu'
labels = ['Foo', 'Bar', 'Really long label']
values = [5, 3, 4]

ind = pylab.array(range(3))
pyplot.barh(ind, values, 0.5)
pyplot.yticks(range(3), labels)
pyplot.tight_layout()

pyplot.show()

抓取用于绘制刻度标签的Text艺术家并直接修改它。我还更改了您的代码以使用 OO 接口(适合在函数中使用)并删除了 pylab(请不要使用 pylab,请使用 pyplotnumpy直接)。

from matplotlib import pyplot as plt
import numpy as np
import matplotlib

matplotlib.rcParams['font.family'] = 'ubuntu'
labels = ['Foo', 'Bar', 'Really long label']
values = [5, 3, 4]

ind = np.array(range(3))
fig, ax = plt.subplots()
ax.barh(ind, values, 0.5, align='center')
ax.set_yticks(range(3))
ax.set_yticklabels(labels)
fig.tight_layout()

txt = ax.yaxis.get_ticklabels()[-1]
txt.set_fontstretch('condensed')
txt.set_fontsize(5)  # I also change the font size

plt.draw()

我还更改了字体大小,因为我不确定我的系统上是否安装了正确的字体。我还将 align='center' kwarg 添加到 barh 中,因为我假设您希望标签在条形图上居中。