Не отображать пропущенные значения matplotlib - PullRequest
0 голосов
/ 28 апреля 2020

Я хотел бы удалить плоские линии на моем графике, сохранив метки x.

У меня есть этот код, который дает мне картинку

dates = df_stock.loc[start_date:end_date].index.values
x_values = np.array([datetime.datetime.strptime(d, "%Y-%m-%d %H:%M:%S") for d in dates])

fig, ax = plt.subplots(figsize=(15,9))

# y values
y_values = np.array(df_stock.loc[start_date:end_date, 'Bid'])
# plotting
_ = ax.plot(x_values, y_values, label='Bid')

# formatting
formatter = mdates.DateFormatter('%m-%d %H:%M')
ax.xaxis.set_major_formatter(formatter)

enter image description here

Плоские линии соответствуют данным, которых не существует. Хотелось бы узнать, можно ли их не отображать, сохраняя пробел в метках x.

спасибо много

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Вы хотите, чтобы время было на оси x, а время равноудалено - независимо от того, есть у вас данные или нет. Теперь у вас есть несколько вариантов:

  1. не используйте время на оси x, но samples / index
  2. делают как в 1. но меняйте метки и метки, чтобы снова рисовать время (но на этот раз не эквидистантно)
  3. сделать вектор значений равноудаленным и использовать NaN s для заполнения пробелов

Почему это так? По умолчанию matplotlib создает линейный график , который соединяет точки с линиями в порядке их представления. В отличие от этого график рассеяния просто отображает отдельные точки, не предлагая какого-либо основного порядка. Вы добьетесь того же результата, что и при использовании линейного графика без маркеров.

В общем, у вас есть 3-4 варианта

  1. с использованием команды plot, но только маркеры графика (добавьте linestyle='')
  2. , используйте команду scatter.
  3. , если вы используете NaN s, plot не знает, что наносить на карту и графики ничего (но также не будет соединять несуществующие точки с линиями)
  4. использовать al oop и строить связанные секции как отдельные линии на одинаковых осях

опции 1/2 являются самыми легкими, если вы хотите практически не вносить изменений в свой код. Вариант 3 является наиболее правильным и 4 подражает этому результату.

0 голосов
/ 28 апреля 2020

Просто установите для значений, где линия Прямая, значение NaN.

см .: Python: Matplotlib избегает построения пробелов

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