Я новичок как в python / matplotlib, так и в использовании его через ноутбук ipython. Я пытаюсь добавить несколько линий аннотации к существующему графику, и я не могу понять, как отобразить линии на графике. Так, например, если я нарисую следующее:
import numpy as np
np.random.seed(5)
x = arange(1, 101)
y = 20 + 3 * x + np.random.normal(0, 60, 100)
p = plot(x, y, "o")
Получаю следующий график:
Итак, как мне добавить вертикальную линию от (70,100) до (70,250)? А как насчет диагональной линии от (70,100) до (90,200)?
Я пробовал несколько вещей, Line2D()
но это не привело ни к чему, кроме замешательства. В R
я бы просто использовать сегменты () функция , которая будет добавлять отрезки. Есть ли аналог в matplotlib
?
источник
x = np.arange(1, 101)
.plt.plot([70, 70], [100, 250], 'k-', lw=2, label="_not in legend")
90
используется какx2
и, иy1
приводит к большой двусмысленности. Для всех, кто просматривает это, обратите внимание, что[70, 90]
это не относится к одной точке в местоположенииx1,y1
. Для справки, вот значения значений:[x1: 70, x2: 90], [y1: 90, y2: 200]
Для новичков еще не поздно .
Он также принимает диапазон y, используя ymin и ymax.
источник
Использование
vlines
:Основные подписи вызовов:
источник
vline()
илиhline()
. А как насчет диагональных линий? Я отредактировал вопрос, чтобы добавить диагональный бит, теперь, когда вы показали мне линии h и v.DataFrame
содержащий координаты x, y, и нанести их на графикstyle='k-'
Matplolib теперь позволяет использовать «строки аннотации», как искал OP.
annotate()
Функция позволяет несколько форм соединительных путей и обезглавленная и tailess стрелки, т.е. простой линии, является одним из них.В документации говорится, что вы можете нарисовать только стрелку с пустой строкой в качестве первого аргумента.
Из примера OP:
Как и в случае с ответом gcalmettes, вы можете выбрать цвет, ширину линии, стиль линии и т. Д.
Вот изменение в части кода, которое сделало бы одну из двух строк примера красной, широкой и не на 100% непрозрачной.
Вы также можете добавить кривую к соединительной линии, отрегулировав
connectionstyle
.источник
.plot()
не может быть.Вместо того, чтобы злоупотреблять
plot
илиannotate
, что будет неэффективно для многих строк, вы можете использоватьmatplotlib.collections.LineCollection
:Требуется список строк
[l1, l2, ...]
, каждая из которых представляет собой последовательность из N координат ( N может быть больше двух).Доступны стандартные ключевые слова форматирования, принимающие либо одно значение, в этом случае значение применяется к каждой строке, либо последовательность M
values
, и в этом случае значение для i- й строки равноvalues[i % M]
.источник