Вывод строк в логарифмическом масштабе (Python)

#python-2.7 #matplotlib #plot #scale

#python-2.7 #matplotlib #построение #масштаб

Вопрос:

Я пытаюсь построить пунктирную линию на графике, используя:

 ax.plot([dt.datetime(2012,01,27,18,19),
         dt.datetime(2012,01,27,18,19)], [0, 1300], 'k--', lw=2)
  

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

 ax.set_yscale('log')
  

строка не отображается

Ответ №1:

Это не будет отображаться, потому что у вас есть число 0 на оси y, измените его на что-то положительное, например 1:

 import matplotlib.pyplot as plt
import datetime as dt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([dt.datetime(2012,01,27,18,19),
     dt.datetime(2012,01,27,18,19)], [1, 1300], 'k--', lw=2)
ax.set_yscale('log')
plt.show()
  

Объяснение:

log(0) не определен. Возвращает Numpy -inf (за которым стоит некоторая логика), но если вы попытаетесь нарисовать точку со значением inf или nan , она не будет нарисована. При построении графиков из линейных сегментов это означает, что два линейных сегмента исчезнут. Теперь вы попытались провести линию между существующей точкой и несуществующей точкой. (Вы можете проверить это, изменив стиль на ‘o’.)