как вставить текст внутри строки, если цвет строки равен фиолетовому - PullRequest
0 голосов
/ 14 октября 2010

Итак, у меня есть это изображение: alt text

Что я пытаюсь сделать, если оставить «H37Rv» только в фиолетовой полосе.

Мой код следующий:

rects = ax.bar(ind, num, width, color=colors)

    for rect in rects:
        height = int(rect.get_height())

        if height < 5:
            yloc = height + 2
            clr = '#182866'
        else:
            yloc = height / 2.0
            clr = '#182866'

        p = 'H37Rv'
        xloc = rect.get_x() + (rect.get_width() / 2.0)
        ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold')

Я также пытался это сделать:

for rect in rects:
        if color == purple:
            height = int(rect.get_height())

            if height < 5:
                yloc = height + 2
                clr = '#182866'

, но я получаю сообщение о том, что цвет не определен.

Кто-нибудь знает, как решить эту проблему?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

Вы можете получить цвет прямоугольника с помощью rect.get_facecolor(), что позволяет разместить метку так, как вы хотите.

В качестве альтернативы, поскольку вы знаете, какие цвета вы использовали при рисовании гистограммы, и если они представлены списком, вы действительно можете легко получить список фиолетовых прямоугольников.

2 голосов
/ 14 октября 2010

Если вы переместите последние три строки вашего первого примера на один уровень отступа, так что они являются частью предложения "else", которое устанавливает цвет на фиолетовый, который должен это сделать.

[Редактировать: Извините, я неправильно прочитал. Это также оставило бы текст во 2-й строке. Насколько я знаю, нет способа получить цвет прямоугольника, но вы могли бы сделать:

rects = ax.bar(ind, num, width, color=colors)

rect = rects[-1]
height = int(rect.get_height())

if height < 5:
    yloc = height + 2
else:
    yloc = height / 2.0

clr = '#182866'
p = 'H37Rv'
xloc = rect.get_x() + (rect.get_width() / 2.0)
ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold')

Это установит текст только в последней строке.

Если это может быть любая полоса, которая может быть фиолетовой, не обязательно последней, ну, у вас есть список цветов, с которыми вы инициализировали прямоугольники, так:

rects = ax.bar(ind, num, width, color=colors)

for i in range(len(colors):
    if colors[i] == purple: # or however you specified "purple" in your colors list
       labelled_rects.append(i)

for i in labelled_rects:
    rect = rects[i]
    height = int(rect.get_height())

    if height < 5:
        yloc = height + 2
    else:
        yloc = height / 2.0

    clr = '#182866'
    p = 'H37Rv'
    xloc = rect.get_x() + (rect.get_width() / 2.0)
    ax.text(xloc, yloc, p, horizontalalignment='center', verticalalignment='center', color=clr, weight='bold')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...