matplotlib单个xtick_label多种颜色

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

我对 Matplotlib 相当陌生,感谢您对我的问题的帮助:

我希望生成一个每个标签有 2 种颜色的图形。例如,名为“first_color”的标签 secondary_color',第一个和第二个颜色不同。如果我使用 label.set_color(colors[0]) ,标签的整体颜色将会改变。如果我使用 label.set_color(colors[i % 2]) ,相邻标签的颜色将会不同。我只想在单个内部标签中使用不同的颜色。

labels = ['1first_color\nsecond_color', '2first_color\nsecond_color', '3first_color\nsecond_color',
          '4first_color\nsecond_color', '5first_color\nsecond_color']
colors = [sns.color_palette('tab10')[0], sns.color_palette('tab10')[1]]  

plt.plot(range(len(labels)), [0, 1, 2, 3, 4])


plt.xticks(range(len(labels)), labels)
for i, label in enumerate(plt.gca().get_xticklabels()):


    label.set_color(colors[0])    

    #label.set_color(colors[i % 2])

 label.set_color(colors[0])

label.set_color(colors[i % 2])

我确信 Matplotlib 中支持这样的功能。我确实浏览了文档/论坛,但找不到太多帮助。

如有任何建议,我们将不胜感激。

我想知道如何在单个标签上设置多种颜色。

python matplotlib plot xticks
1个回答
0
投票

如果刻度标签需要在不同的行上使用不同的颜色,您可以在刻度位置显式放置文本。通过 x 轴变换,x 位置可以在“数据坐标”中给出(0 表示第一个标签,1 表示第二个标签,等等),y 位置可以在“轴坐标”中给出(0 位于底部,“ax”顶部为 1,“ax”下方位置为负值)。您可能需要稍微更改 y 位置,具体取决于刻度长度和使用的字体。

import matplotlib.pyplot as plt
import seaborn as sns

labels = ['1first_color\nsecond_color', '2first_color\nsecond_color', '3first_color\nsecond_color',
          '4first_color\nsecond_color', '5first_color\nsecond_color']
colors = sns.color_palette('tab10')[:2]
plt.plot(range(len(labels)), [0, 1, 2, 3, 4])
plt.xticks(range(len(labels)), []) # set tick positions without labels
ax = plt.gca()  # get the current subplot
for i, label in enumerate(labels):
    ax.text(i, -0.03, label.split('\n')[0], color=colors[0],
            transform=ax.get_xaxis_transform(), ha='center', va='top')
    ax.text(i, -0.08, label.split('\n')[1], color=colors[1],
            transform=ax.get_xaxis_transform(), ha='center', va='top')
plt.tight_layout()
plt.show()

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