Использование drawstyle «steps-mid» вместе с x-log-scale приводит к тому, что точки шага не центрируются - PullRequest
2 голосов
/ 28 января 2020

Matplotlib предлагает различные варианты drawstyle . steps-mid выполняет следующие действия:

Варианты шагов соединяют точки с помощью ступенчатых линий, то есть горизонтальных линий с вертикальными шагами. [...]
'steps-mid': шаг находится посередине между точками.

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

import matplotlib.pyplot as plt
import numpy as np

x = np.logspace(0, 10, num=10)
y = np.arange(x.size) % 2

fig, ax = plt.subplots()
ax.set_xscale('log')
ax.plot(x, y, drawstyle='steps-mid', marker='s')

Plot

Есть ли способ использовать пошаговое построение вместе с x- логарифмическая шкала такая, что шаги центрированы между точками данных в лог-пространстве?

1 Ответ

1 голос
/ 28 января 2020

Я не знаю другого способа, кроме как правильно построить шаги в пространстве журнала:

import matplotlib.pyplot as plt
import numpy as np

x = np.logspace(0, 10, num=10)
y = np.arange(x.size) % 2


def log_steps_mid(x, y, **kwargs):
    x_log = np.log10(x)
    x_log_mid = x_log[:-1] + np.diff(x_log)/2
    x_mid = 10 ** x_log_mid
    x_mid = np.hstack([x[0],
                       np.repeat(x_mid, 2),
                       x[-1]])
    y_mid = np.repeat(y, 2)
    ax.plot(x_mid, y_mid, **kwargs)


fig, ax = plt.subplots()
ax.set_xscale('log')
ax.plot(x, y, ls='', marker='s', color='b')
log_steps_mid(x, y, color='b')


Correct log steps-mid

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