Построение разных цветов в matplotlib - python - PullRequest
0 голосов
/ 10 ноября 2019

Я работаю над небольшим проектом по проблеме маршрутизации транспортных средств, где набор транспортных средств доставляет товары группе клиентов.

Решение будет примерно таким:

Sub-route 1:  Depot Customer4  Customer7
Sub-route 2:  Depot Customer1  Customer5  Customer3  
Sub-route 3:  Depot Customer2  Customer6

где депо всегда имеет координаты xy (0,0), поэтому x_all и y_all будут выглядеть примерно так:

x_all = [0,x4,x7,0,x1,x5,x3,0,...]
y_all = [0,y4,y7,0,y1,y5,y3,0,...]
plt.plot(x_all, y_all)

Как можно построить график, который имеет разные цвета для разных маршрутов? Другими словами, цвета будут меняться, когда (x, y) = (0,0). Спасибо

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Вы можете сделать что-то вроде этого:

# Find indices where routes get back to the depot
depot_stops = [i for i in range(len(x_all)) if x_all[i] == y_all[i] == 0]
# Split route into sub-routes
sub_routes = [(x_all[i:j+1], y_all[i:j+1]) for i, j in zip(depot_stops[:-1], depot_stops[1:])]

for xs, ys in sub_routes:
    plt.plot(xs, ys)
    # (Consecutive calls will automatically use different colours)

plt.show()
0 голосов
/ 10 ноября 2019

Есть несколько способов сделать это, но я бы предложил использовать многомерный список:

x = [[0, 4, 7],
     [0, 5, 3],
     [0, 2, 1]]

y = [[0, 4, 7],
     [0, 1, 5],
     [0, 2, 1]]

for i in range(len(x)):
    plt.plot(x[i], y[i])

plt.show()

И Matplotlib позаботится о раскраске для вас

multicolor matplotlib plot

Это рекомендуемый способ управления вашими данными, поскольку теперь вы можете индексировать каждый маршрут независимо, не беспокоясь о том, что все маршруты имеют одинаковую длину. Например, если у одного маршрута было 4 остановки, и вам нужно было получить этот набор остановок, вам нужно будет индексировать массивы x и y, зная, где находится этот маршрут. Вместо этого я мог бы просто проиндексировать 1-й маршрут x и y:

x[1]
>> [0, 5, 3]
y[1]
>> [0, 1, 5]
...