Горизонтальные линии с LineCollection в matplotlib? - PullRequest
1 голос
/ 17 февраля 2020

Как добавить или создать горизонтальные линии с LineCollection в matplotlib? Я пытаюсь сделать анимацию быстрее, и не хочу go на старой почве, но в основном я стараюсь избегать использования axhline в a для l oop для построения массива линий. Поэтому было рекомендовано попробовать LineCollection. Но пока я могу только построить серию.

import numpy as np
from matplotlib.collections import LineCollection
import matplotlib.pyplot as plt

x = [1,2,3,4,5,6,7,8,9]
y = [42,13,24,14,74,45,22,44,77]

lc = LineCollection(zip(x,y),color='blue')
fig,a = plt.subplots()
a.add_collection(lc)
a.set_xlim(0,10)
a.set_ylim(0,100)
plt.show()

И если я добавлю координаты явно, например:

x = [(0,9),(0,9),(0,9),(0,9),(0,9),(0,9),(0,9),(0,9),(0,9)]
y = [(42,42),(13,13),(24,24),(14,14),(74,74),(45,45),(22,22),(44,44),(77,77)]

Я получу следующий график? enter image description here

Как это вообще возможно?

Ответы [ 2 ]

3 голосов
/ 17 февраля 2020

Один из вариантов такой:

import numpy as np
from matplotlib.collections import LineCollection
import matplotlib.pyplot as plt


y = [42,13,24,14,74,45,22,44,77]
segs = np.zeros((len(y), 2, 2))
segs[:,:,1] = np.c_[y,y]
segs[:,1,0] = np.ones(len(y))


fig, ax = plt.subplots()
lc = LineCollection(segs,color='blue', transform=ax.get_yaxis_transform())
ax.add_collection(lc)
ax.set_xlim(0,10)
ax.set_ylim(0,100)
plt.show()
1 голос
/ 17 февраля 2020

Здесь вы go:

import numpy as np
from matplotlib.collections import LineCollection
import matplotlib.pyplot as plt

# set x coordinates range
N = 10
x = np.arange(1, N, 1)

# create set od data for lines
number_of_lines = 6
base_array = np.ones(N-1)
lines_list = [base_array + i for i in range(number_of_lines)]

# set plot limits
fig, ax = plt.subplots()
ax.set_xlim(np.min(x), np.max(x))
ax.set_ylim(np.min(lines_list)-1, np.max(lines_list)+1)

# load sequences of aray pairs (x,y)
line_segments = LineCollection([np.column_stack([x, y]) for y in lines_list], linestyles='solid')
line_segments.set_array(x)
ax.add_collection(line_segments)
plt.show()

Вывод:

enter image description here

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