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

时间:2015-03-21 20:43:05

标签: python matplotlib

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

Example graph with long label

如何仅为有问题的标签使用替代字体?该机器具有" 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()

1 个答案:

答案 0 :(得分:2)

抓住用于绘制刻度标签的Text艺术家并直接修改它。我还将代码更改为使用OO界面(适合在函数中使用)并删除pylab(请不要使用pylab,使用pyplot和直接numpy

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,因为我假设您希望标签位于条形图上。 enter image description here