簡體   English   中英

如何拆分 y 軸標簽並分別為每個部分着色?

[英]How to split y axis labels and color each part separately?

ax.yaxis.get_major_ticks()允許我對每個 label 進行不同的顏色編碼。 但我未能拆分 label 並用不同的顏色標記每個部分。

示例圖像: A_B => 藍色的 A和紅色的_B ,類似地C_D => 藍色的C和紅色的D等。

在遍歷所有刻度時,文本可通過get_text()獲得,但無法單獨對每個部分進行顏色編碼。

這是水平堆疊條形圖的示例圖形表示:

圖片

借用這篇優秀文章中的一些代碼,可以通過偏移框將文本放在一起。

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()

結果圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM