Ошибка типа: __init__() отсутствует 1 требуемый позиционный аргумент: ‘ось’, как я могу решить

#python-3.x #matplotlib

#python-3.x #matplotlib

Вопрос:

 class CustomScale(mscale.ScaleBase):
    name = 'custom'

    def __init__(self,axis, **kwargs):
        mscale.ScaleBase.__init__(self)
        self.thresh = None #thresh

    def get_transform(self):
        return self.CustomTransform(self.thresh)

    def set_default_locators_and_formatters(self, axis):
        pass

    class CustomTransform(mtransforms.Transform):
        input_dims = 1
        output_dims = 1
        is_separable = True

        def __init__(self, thresh):
            mtransforms.Transform.__init__(self)
            self.thresh = thresh

        def transform_non_affine(self, a):
            return np.log(1 a)

        def inverted(self):
            return CustomScale.InvertedCustomTransform(self.thresh)

    class InvertedCustomTransform(mtransforms.Transform):
        input_dims = 1
        output_dims = 1
        is_separable = True

        def __init__(self, thresh):
            mtransforms.Transform.__init__(self)
            self.thresh = thresh

        def transform_non_affine(self, a):
            return np.exp(a)-1

        def inverted(self):
            return CustomScale.CustomTransform(self.thresh)

# Now that the Scale class has been defined, it must be registered so
# that ``matplotlib`` can find it.
mscale.register_scale(CustomScale)
z = [0,0.1,0.3,0.9,1,2,5]
thick = [20,40,20,60,37,32,21]

fig = plt.figure(figsize=(8,5))
ax1 = fig.add_subplot(111)
ax1.plot(z, thick, marker='o', linewidth=2, c='k')

plt.xlabel(r'$rm{redshift}$', size=16)
plt.ylabel(r'$rm{thickness (kpc)}$', size=16)
plt.gca().set_yscale('custom')
plt.show()
  

###############################################################
Это всегда выдает мне ошибку, подобную этой: ошибка типа: init() отсутствует 1 требуемый позиционный аргумент: ‘ось’.
###################################################################
Я не знаю, как это исправить. Если попытаться :

 plt.gca().set_yscale('custom', axis=1)
  

….
################################################################################
Я нахожу это: ошибка типа: scale_factory() получил несколько значений для аргумента ‘axis’

################################################################################

Ответ №1:

При вызове init вы пропускаете axis .

Вместо:

 mscale.ScaleBase.__init__(self)
  

Это должно быть

 Instead of: `mscale.ScaleBase.__init__(self, axis)
  

Я думаю, что вы thresh также пропускаете init вызовы CustomTransform и InvertedCustomTransform