在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')
谢谢!
答案 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)