更改matplotlib图标签中单个字符的颜色

时间:2015-11-12 18:24:46

标签: python python-3.x matplotlib

在python 3.4中使用matplotlib:

我希望能够在轴标签中设置单个字符的颜色。

例如,条形图的x轴标签可能是['100','110','101','111',...],我希望第一个值为红色,其他人都是黑人。

这是否可行,是否有某种方法可以格式化文本字符串以便以这种方式读出它们?也许有一些句柄可以在set_xticklabels中获取并修改?

或者,有没有matplotlib以外的库可以做到吗?

示例代码(为了解我的习语):

rlabsC = ['100','110','101','111']
xs = [1,2,3,4]
ys = [0,.5,.25,.25]

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.bar(xs,ys)
ax.set_xticks([a+.5 for a in xs])
ax.set_xticklabels(rlabsC, fontsize=16, rotation='vertical')

谢谢!

1 个答案:

答案 0 :(得分:0)

我想,它会涉及一些工作。问题是单个Text个对象只有一种颜色。解决方法是将标签拆分为多个文本对象。

首先我们写下标签的最后两个字符。要编写第一个字符,我们需要知道要绘制轴的下方多远 - 这是使用变换器和example found here完成的。

rlabsC = ['100','110','101','111']
xs = [1,2,3,4]
ys = [0,.5,.25,.25]

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.bar(xs,ys)
ax.set_xticks([a+.5 for a in xs])

plt.tick_params('x', labelbottom='off')

text_kwargs = dict(rotation='vertical', fontsize=16, va='top', ha='center')
offset = -0.02

for x, label in zip(ax.xaxis.get_ticklocs(), rlabsC):
    first, rest = label[0], label[1:]

    # plot the second and third numbers
    text = ax.text(x, offset, rest, **text_kwargs)

    # determine how far below the axis to place the first number
    text.draw(ax.figure.canvas.get_renderer())
    ex = text.get_window_extent()
    tr = transforms.offset_copy(text._transform, y=-ex.height, units='dots')

    # plot the first number
    ax.text(x, offset, first, transform=tr, color='red', **text_kwargs)

enter image description here