Как всегда размещать осевую единицу в определенной позиции метки в Matplotlib?Python

Программы на Python
Anonymous
Как всегда размещать осевую единицу в определенной позиции метки в Matplotlib?

Сообщение Anonymous »


Мне нравится особый способ включения единиц измерения в графики:
Изображение


Изображение взято из Википедии, со страницы, посвященной DIN 461.

Единица измерения всегда размещается на предпоследнем такте оси. Я хочу воссоздать такое поведение с помощью Matplotlib, и мне удалось изменить xlabels напрямую с помощью plt.gca().set_xticklabels(). Однако использование set_xticklabels не рекомендуется, поскольку оно перестает отображать правильные значения, как только вы масштабируете/панорамируете или делаете что-либо с графиком. Вместо этого я хотел бы иметь решение, в котором предпоследняя метка галочки всегда заменяется на единицу измерения.

Я попробовал написать собственный форматировщик тиковых меток и разместить единицу измерения в зависимости от позиции. Это еще не сработало из-за разного количества меток, которые могут отображаться в зависимости от соотношения сторон масштаба и т. д., а также из-за того, что pos по какой-то причине часто имеет значение None.

из matplotlib.ticker import FuncFormatter @FuncFormatter защита my_formatter(x, pos): верните f"{x}" if pos != 6 else 'Unit' В качестве альтернативы я использовал ax.set_xticks с некоторой функцией форматирования Formatter: ax.set_xticks(ax.get_xticks(), Formatter(ax.get_xticks())), но это показывает больше тиков, чем я хочу, а также не меняет галочки при масштабировании, см. ниже:

Пример графика:
Изображение


Получил xticks, заменил предпоследнюю метку на единицу и установил xticks:

xticks = ax.get_xticks() xtick_labels = список (xticks) xtick_labels[-2] = "мА" ax.set_xticks(xticks, labels=xtick_labels) В углах появляются новые галочки и меняются пределы x:
Изображение


При увеличении отметки больше не обновляются, а метка объекта исчезает.
Изображение

Вернуться в «Python»