Почему объект оси matplotlib не имеет метода set_scale?

Я хотел бы настроить ось фигуры (примечание: ось, а не оси) напрямую, а не вызовы методов осей, которые требуют, чтобы я знал заранее, настраиваю ли я ось x или y.

Я могу установить масштаб оси x для объекта фигуры matplotlib, используя ...

fig.get_axes()[0].set_xscale('log')

но я не могу сделать это с помощью чего-то вроде ...

fig.get_axes()[0].xaxis.set_scale('log')

потому что объект Axis (в отличие от объекта Axes) не имеет метода set_scale. Хотя у него есть метод get_scale (и, по-видимому, много эквивалентов методов set_ [xy] ????, хотя я не замечаю set_lim).

Есть ли для этого причина или просто никто раньше не думал об этом разоблачать?

(матплотлиб 2.1.0).

1
0
109
1

Ответы 1

И затем я обнаружил, что у объекта Axis есть метод _set_scale, предположительно названный, чтобы избежать столкновения.

Обратите внимание на комментарий ниже, что вызов подчеркнутого внутреннего метода не является хорошей идеей, довольно громоздкое решение, которое я придумал, - это ...

def setup_log_axis(axis):
    if axis == axis.axes.xaxis:
        axis.axes.set_xscale('log')
    elif axis == axis.axes.yaxis:
        axis.axes.set_yscale('log')
....do more stuff

Одиночное подчеркивание в начале имени метода обычно указывает, что он предназначен только для внутреннего использования - см. PEP 8

asongtoruin 11.04.2018 13:12

Принято к сведению. Я склоняюсь к тому, чтобы его оставили вне API по недосмотру. Фактический объект Scale (что-то вроде <matplotlib.scale.LogScale at 0x600fc978>) кажется атрибутом объекта Axis, а не объекта Axes, поэтому я предполагаю, что вызов set_xscale на Axes просто вызывает _set_scale на Axis, но публичный set_scale не открыт. Также нет set_lim.

Ymareth 11.04.2018 15:00

Другие вопросы по теме