Ярлыки легенды Python Windrose

Я пытаюсь получить полный контроль над легендой в "Роза Ветров"; легенда контролируется бункерами, которые можно вызвать с помощью ax.info['bins'], Тем не менее, я хочу изменить имя группы бинов.

Имена групп бен

Посмотрев онлайн, единственное решение, которое я нашел, было отредактировать.py файл windrose, отредактировать его и затем снова импортировать в скрипт на python.

Формат скобок легенды Python Windrose и местоположение

Я искал более простой способ, так как я планирую иметь разные ячейки для разных участков в сценарии. Пока я пытался label а также set_label который, кажется, не работает.

2 ответа

Добавив аргумент меток в ax.set_legend и изменив скрипт для принятия аргумента. Я также добавил небольшую проверку, которая отображает ошибку в случае, если метки не совпадают с маркерами.

ax.set_legend(labels = ['T', 'S', 'M'], title="Failure Mode", loc="upper left")

    def get_labels(labels, decimal_places=1):
        _decimal_places = str(decimal_places)

        fmt = (
            "[%." + _decimal_places + "f " +
            ": %0." + _decimal_places + "f"
        )

        if labels is None:
            labels = np.copy(self._info['bins'])
            if locale.getlocale()[0] in ['fr_FR']:
                fmt += '['
            else:
                fmt += ')'
            labels = [fmt % (labels[i], labels[i + 1])
                for i in range(len(labels) - 1)]
        else:
            if len(labels) != len(self._info['bins']) -1 :
                print("ERROR")
            labels = labels

        return labels


    kwargs.pop('handles', None)

    decimal_places = kwargs.pop('decimal_places', 1)
    labels = kwargs.pop('labels', None)

    handles = get_handles()
    labels = get_labels(labels, decimal_places)
    self.legend_ = mpl.legend.Legend(self, handles, labels, loc, **kwargs)
    return self.legend_

больше информации: решение проблемы Github

Если set_label не работает, попробуйте следующее:

      wind_bins = [0, 2, 4]
wind_labels = ["a", "b", "c"]
ax.contourf(x, y,bins=wind_bins, cmap=cm.viridis_r)
#set bbox_anchor before modif
legend = ax.legend(loc='upper left', bbox_to_anchor=(1, 1))
#get legend text
legend_texts = legend.get_texts()
#change legend text
for j,lab in enumerate(wind_labels):
    legend_texts[j].set_text(lab)
Другие вопросы по тегам