Логарифмические координаты как построить
Перейти к содержимому

Логарифмические координаты как построить

  • автор:

Делаем логарифмический масштаб у координатных осей

До сих пор мы с вами отображали графики в декартовой системе с линейным шагом изменения значений. Это довольно частый вариант, который используется в большинстве случаев. Но бывают функции, которые требуют логарифмического масштаба (изменения шага) по координатам.

Например, если сформировать график функции:

Если отобразить его в линейной системе координат:

import numpy as np import matplotlib.pyplot as plt fig = plt.figure(figsize=(7, 4)) ax = fig.add_subplot() x = np.arange(-10*np.pi, 10*np.pi, 0.5) ax.plot(x, np.sinc(x) * np.exp( -np.abs(x/10)) ) ax.grid() plt.show()

То мелкие колебания функции на больших частотах будут не видны:

Как раз здесь может помочь логарифмический масштаб по оси ординат. Для этого достаточно воспользоваться методом semilogy(), чтобы по оси Oy откладывался логарифмический масштаб (логарифм по основанию 10) для графика:

ax.semilogy(x, np.sinc(x) * np.exp( -np.abs(x/10)) )

В результате получим следующее построение:

Видите, стало гораздо информативнее и конечному пользователю показывается больше информации о сигнале.

Аналогично, можно формировать логарифмический масштаб по оси ординат с помощью метода:

Того же самого эффекта можно добиться и с помощью прежней функции plot(), только дополнительно указать логарифмический масштаб по нужной оси. Например, так:

ax.plot(x, np.sinc(x) * np.exp( -np.abs(x/10)) ) ax.set_yscale('log')

Здесь был использован метод set_yscale() для изменения масштаба со значения ‘linear’ на значение ‘log’. По аналогии, можно изменить масштаб и для оси Ox с помощью метода set_xscale():

ax.set_xscale('log')
  • ‘linear’ – линейный масштаб (используется по умолчанию);
  • ‘log’ – логарифмический масштаб;
  • ‘symlog’ – вблизи нуля (в указанных пределах) масштаб линейный, а в остальной области – логарифмический.
ax.set_yscale('log', base=5)

Вернемся к нашему графику. Если на него внимательно посмотреть, то по вертикали дополнительно отложены небольшие риски. Это восемь промежуточных линейных значений. Например, между значениями Откладываются риски со значениями: 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2 Мы можем управлять их отображением, указав их значения в виде целых чисел в списке параметра subs:

ax.set_yscale('log', subs=[2, 9])

Здесь мы указываем отображать риску со значением 0,2 или 0,02 или 0,002 и т.д. И риску со значениями 0,9 или 0,09 или 0,009 и т.д. Рассмотрим далее возможность использования третьего параметра ‘symlog’. Мы его пропишем для оси Ox в следующем виде:

x = np.arange(-10*np.pi, 10*np.pi, 0.1) ax.plot(x, np.sinc(x) * np.exp( -np.abs(x/10)) ) ax.set_xscale('symlog', linthresh=2)

Здесь использован дополнительный параметр linthresh, определяющий граничное значение [-2; 2], где график следует отображать в линейном масштабе. А все, что выходит за эти пределы – в логарифмическом. В результате, получим такое построение: Дополнительно линейный масштаб можно растянуть, указав масштаб в дополнительном параметре linscale:

ax.set_xscale('symlog', linthresh=2, linscale=5)

Наконец, если нам нужно установить логарифмический масштаб по обеим осям, то проще всего для этого воспользоваться функцией loglog(), вместо функции plot() или semilogx()/semilogy():

ax.loglog(x, np.sinc(x) * np.exp( -np.abs(x/10)) )

Вот так, достаточно просто можно задавать и управлять логарифмическим масштабом при отображении графиков в пакете matplotlib.

WolframAlpha для всех

Экспоненциальные кривые приобретают в логарифмической системе координат более простой вид. Wolfram|Alpha позволяет легко строить графики функций в логарифмической системе координат. Для этого нужно использовать префикс log.

Еще несколько показательных примеров:

Чтобы построить несколько графиков в логарифмической системе координат нужно использовать фигурные скобки.

При написании этой статьи я обнаружил, что при задании интервала изменения аргумента фукнкции при построении графика функции в логарифмической системе координат в системе Wolfram|Alpha возникают проблемы.

Как создавать графики Matplotlib с логарифмическими шкалами

Как создавать графики Matplotlib с логарифмическими шкалами

Часто вам может понадобиться создать графики Matplotlib с логарифмическими шкалами для одной или нескольких осей. К счастью, Matplotlib предлагает для этого следующие три функции:

  • Matplotlib.pyplot.semilogx() — построить график с логарифмическим масштабированием по оси X.
  • Matplotlib.pyplot.semilogy () — построить график с логарифмическим масштабированием по оси Y.
  • Matplotlib.pyplot.loglog() — построить график с логарифмическим масштабированием по обеим осям.

В этом руководстве объясняется, как использовать каждую из этих функций на практике.

Пример 1: Логарифмическая шкала для оси X

Предположим, мы создаем линейную диаграмму для следующих данных:

import matplotlib.pyplot as plt #create data x = [1, 8, 190, 1400, 6500] y = [1, 2, 3, 4, 5] #create line chart of data plt.plot (x,y) 

Мы можем использовать функцию .semilogx() для преобразования оси x в логарифмическую шкалу:

plt.semilogx () 

График Matplotlib с логарифмической шкалой по оси X

Обратите внимание, что ось Y точно такая же, но ось X теперь имеет логарифмическую шкалу.

Пример 2: Логарифмическая шкала для оси Y

Предположим, мы создаем линейную диаграмму для следующих данных:

import matplotlib.pyplot as plt #create data x = [1, 2, 3, 4, 5] y = [1, 8, 190, 1400, 6500] #create line chart of data plt.plot (x,y) 

Мы можем использовать функцию .semilogy() для преобразования оси Y в логарифмическую шкалу:

plt.semilogy () 

Matplotlib с логарифмической шкалой по оси Y

Обратите внимание, что ось X точно такая же, но ось Y теперь имеет логарифмическую шкалу.

Пример 3: Логарифмическая шкала для обеих осей

Предположим, мы создаем линейную диаграмму для следующих данных:

import matplotlib.pyplot as plt #create data x = [10, 200, 3000, 40000, 500000] y = [30, 400, 5000, 60000, 750000] #create line chart of data plt.plot (x,y) 

Мы можем использовать функцию .loglog() для преобразования оси Y в логарифмическую шкалу:

plt.loglog (x, y) 

График журнала журнала в Matplotlib

Обратите внимание, что обе оси теперь имеют логарифмическую шкалу.

Задание логарифмической шкалы в отчете с разбивкой на страницы (построитель отчетов)

Если данные пропорциональны логарифму, в диаграмме в отчете с разбивкой на страницы можно использовать логарифмическую шкалу. Это может улучшить внешний вид диаграммы и повысить удобство работы с данными. Большинство логарифмических шкал использует логарифм с основанием 10.

Эта функция доступна только для оси значений. Ось значений обычно является вертикальной осью (осью Y). Однако в линейчатых диаграммах это горизонтальная ось (ось X).

Если ось логарифмическая, все остальные ее свойства будут логарифмически масштабированы. Например, если задать на оси логарифмическую шкалу с основанием 10, установка интервала шкалы, равного 2, на самом деле создаст интервалы, равные 10 в степени 2, то есть 100. Это означает, что будут отображены значения осей 1, 100, 10000, а не значения по умолчанию 1, 10, 100, 1000, 10000.

Создать и изменить определение для отчета на страницу (RDL-файл) можно с помощью построителя отчетов (Майкрософт), построителя отчетов Power BI и конструктора отчетов в SQL Server Data Tools.

Задание логарифмической шкалы

  1. Щелкните правой кнопкой мыши ось Y диаграммы и выберите пункт Свойства вертикальной оси. Откроется диалоговое окно Свойства вертикальной оси .
  2. В поле Свойства осивыберите Использовать логарифмическую шкалу.
  3. В текстовом поле Основание логарифма введите положительное значение для основания логарифма. Если значение не задано, по умолчанию берется логарифм с основанием 10.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *