#python #class #matplotlib
#python #класс #matplotlib
Вопрос:
Итак, на этом графике ниже я нахожу отдельные точки и их индексы. Когда мы рисуем окончательный рисунок, на рисунке должна быть информация о том, когда именно произошел разрыв, и должна быть добавлена вертикальная линия на разрыве. Чтобы сделать это, мне пришлось добавить «plt.axvline» и «plt.text» вместе как пару.
Я выписал код, подобный этому здесь:
Однако всякий раз, когда появляется новый индекс, очень неудобно добавлять две строки кода вручную, и что, если проявится 100 разрывов, их почти невозможно добавить.
Я думаю об объектно-ориентированном методе для этого, например, «класс», но я понятия не имею, с чего начать..
Есть идеи о том, как рекурсивно добавить его, зная длину индексов?
if len(idx) == 1 :
plt.figure(figsize = (20,10))
plt.axvline(x=idx[0], color = 'r')
plt.text(idx[0],.13, '{}'.format(send_time[idx[0]-1]))
plt.title(var)
plt.scatter(x, result, alpha = alp)
plt.savefig("XXX.png")
plt.close()
elif len(idx) == 2:
plt.figure(figsize = (20,10))
plt.axvline(x=idx[0], color = 'r')
plt.text(idx[0],.10, '{}n{}'.format(send_time[idx[0]], time1[idx[0]]))
plt.axvline(x=idx[1], color = 'b')
plt.text(idx[1],.10, '{}'.format(send_time[idx[1]-1]))
plt.title(var)
plt.scatter(x, result, alpha = alp)
plt.savefig("XXX.png")
plt.close()
elif len(idx) == 3:
plt.figure(figsize = (20,10))
plt.axvline(x=idx[0], color = 'r')
plt.text(idx[0],.13, '{}n{}'.format(send_time[idx[0]],time1[idx[0]]))
plt.axvline(x=idx[1], color = 'b')
plt.text(idx[1],.12, '{}n{}'.format(send_time[idx[1]],time1[idx[1]]))
plt.axvline(x=idx[2], color = 'y')
plt.text(idx[2],.11, '{}'.format(send_time[idx[2]-1]))
plt.title(var)
plt.scatter(x, result, alpha = alp)
plt.savefig("XXX.png")
plt.close()
Комментарии:
1. важен ли разный цвет для каждой строки axvline? В противном случае простой цикл for через idx мог бы выполнить эту работу
2. @jrmylow Не могли бы вы привести мне короткий пример выполнения этого с помощью цикла for ? Я думаю, что я мог бы использовать для этого тот же цвет.
3. в чем значение send_time и time1 ?
Ответ №1:
В общем, лучше перебирать коллекцию напрямую for item in collection
, а не использовать индексы.
plt.figure(figsize = (20,10))
for num in idx:
plt.axvline(num, color = 'r')
plt.text(num, .13, '{}'.format(send_time[num-1]))
plt.title(var)
plt.scatter(x, result, alpha = alp)
plt.savefig("XXX.png")
plt.close()