如何分割y轴标签并分别为每个部分着色?

问题描述 投票:3回答:1

ax.yaxis.get_major_ticks()使我可以对每个标签进行不同的颜色编码。但是我无法分割标签并用不同的颜色标记每个零件。

示例图像:A_B => A在蓝色中,_ B在红色中,类似地[[C_D => C在蓝色中,而D在蓝色中红色等

虽然循环遍历所有刻度,get_text()中提供了文本,但是用相同的颜色不可能分别编码每个部分。

这是水平堆叠的条形图的示例图形表示:

image

python matplotlib
1个回答
3
投票
this excellent post借用一些代码,可以通过偏移框将文本放在一起。

import matplotlib.pyplot as plt from matplotlib.offsetbox import AnchoredOffsetbox, TextArea, HPacker fig, ax = plt.subplots() vals1 = [0.3, 0.5, 0.4, 0.2, 0.5] vals2 = [0.2, 0.3, 0.2, 0.2, 0.1] labels1 = ['A', 'B', 'CCCC', 'DDDDDD', 'E'] labels2 = ['B', 'CCCC', 'DDDDDD', 'E', 'F'] color1 = 'dodgerblue' color2 = 'crimson' ax.barh(range(len(vals1)), vals1, color=color1) ax.barh(range(len(vals2)), vals2, left=vals1, color=color2) ax.set_yticklabels([]) for i in range(len(labels1)): boxes = [TextArea(text, textprops=dict(color=color)) for text, color in zip([labels1[i], '_', labels2[i]], [color1, 'black', color2])] xbox = HPacker(children=boxes, align="right", pad=1, sep=1) anchored_xbox = AnchoredOffsetbox(loc='center right', child=xbox, pad=0, frameon=False, bbox_to_anchor=(0, i), bbox_transform=ax.transData, borderpad=1) ax.add_artist(anchored_xbox) plt.tight_layout() plt.show()

resulting plot
© www.soinside.com 2019 - 2024. All rights reserved.