Как установить другую единицу шкалы для вторичной оси в matplotlib? - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь построить набор данных из фильтра нижних частот R C. На левой оси я хочу иметь отношение U_out / U_in, а на правой стороне - усиление в дБ. Теперь для этого я нашел функцию matplotlib secondary_yaxis (следуя этому примеру ). Проблема в том, что, насколько я могу судить, я не могу построить разные шкалы с каждой стороны, но мне нужна логарифмическая шкала c слева. Тем не менее, поскольку дБ - это единица логарифмических c, значения отрицательны и не могут быть нанесены на шкалу логарифмических c. Как лучше всего решить эту проблему? Я тоже пробовал твинкс, проблема в том, что они различаются масштабом, очевидно. Также по какой-то (возможно, связанной) причине правая шкала даже не отображается правильно - 0 должно быть там, где 1 находится слева, и я не знаю, что происходит с этими числами внизу: D

xdata = V2tp[:,0]
ydata = V2tp[:,2]

def TOdB(x):
    """
    function for secaxis
    """
    return 20*np.log10(abs(x))

def dBTO(x):
    """
    inverted function for secaxis
    """
    return (10**x)/20

fig, ax = plt.subplots(figsize=(8,6))

ax.set_xscale('log')
#ax.set_yscale('log')       # not possible because otherwise secaxis log as well 
secaxis = ax.secondary_yaxis('right', functions=(TOdB, dBTO), yscale='linear') # yscale doesn't seem to change anything

ax.plot(xdata, ydata,'.', label='Messwerte')

ax.set_xlabel(r'frequency f (Hz)', fontsize = 20)
ax.set_ylabel(r'U_out/U_in', fontsize = 20)
secaxis.set_ylabel(r'Gain (dB)', fontsize = 20)
ax.grid()

Изображение участка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...