Пользовательское масштабирование по логарифмической оси в matplotlibPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Пользовательское масштабирование по логарифмической оси в matplotlib

Сообщение Anonymous »

Я пытаюсь масштабировать ось X графика с помощью math.log(1+x) вместо обычного параметра масштабирования «логарифм», и я просмотрел некоторые примеры пользовательского масштабирования, но не могу. не заставлю меня работать! Вот мой MWE:

import matplotlib.pyplot as plt
import numpy as np
import math
from matplotlib.ticker import FormatStrFormatter
from matplotlib import scale as mscale
from matplotlib import transforms as mtransforms

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 math.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 math.log(1+a)

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_xscale('custom')
plt.show()


Подробнее здесь: https://stackoverflow.com/questions/434 ... matplotlib
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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