分别自定义matplotlib ticklabels

时间:2019-07-15 14:25:31

标签: python matplotlib

请继续下面的示例,在该示例中,我要将标签“ C”的weight更改为bold

df = pd.DataFrame(data={'value': [3, 5, 7, 4, 5]},
                  index=list('ABCDE'))

fig, ax = plt.subplots()
df.plot.barh(ax=ax)

enter image description here

我见过许多示例(例如tick_paramsset_yticklabels)更改了所有ticklabel或仅替换了标签without formatting

是否可以单独自定义它?

1 个答案:

答案 0 :(得分:1)

这是一种方法:

  • 遍历默认刻度标签
  • 将所需标签修改为黑体
  • 重新分配刻度标签。

from matplotlib import rc
import pandas as pd
import matplotlib.pyplot as plt

rc('text', usetex=True)

df = pd.DataFrame(data={'value': [3, 5, 7, 4, 5]},
                  index=list('ABCDE'))

fig, ax = plt.subplots()
df.plot.barh(ax=ax)

fig.canvas.draw()
new_labels = []
to_modify = 'C'

for lab in ax.get_yticklabels():
    txt = lab.get_text()
    if txt == to_modify:
        new_labels.append(r'$\textbf{%s}$' %txt) # append bold face text
    else:    
        new_labels.append(txt) # append normal text

ax.set_yticklabels(new_labels)        

enter image description here

ImportanceOfBeingEarnest 建议的替代方案:set_fontweight仅在不使用乳胶(TeX渲染)的情况下有效。

fig, ax = plt.subplots()
df.plot.barh(ax=ax)

to_modify = 'C'

for lab in ax.get_yticklabels():
    if lab.get_text() == to_modify:
      lab.set_fontweight('bold')