/ / Wektory w pythonie w następującym kodzie - python, numpy, matplotlib, vectorization, Gantt-chart

Wektoryzacja w pythonie w następującym kodzie - python, numpy, matplotlib, vectorization, Gantt-chart

Próbuję wykreślić wykres Gantta. Jestem nowym użytkownikiem Pythona i nie znam zaawansowanych koncepcji programistycznych. Po uruchomieniu kodu pojawia się komunikat o błędzie.

import numpy as np
import matplotlib as mpl
import pylab as plt

arr=np.loadtxt("gantt.csv",dtype=float,delimiter=",")

colormapd = {
1:"r",
2:"g",
3:"b",
4:"y",
5:"m",
6:"k",
7:"r",
8:"g",
9:"b",
0:"y",
}

therange=range(500,2500)

jobnum= arr[therange,0].astype(int)
macnum= arr[therange,2].astype(int)
procstart = arr[therange,3]
procfinish = arr[therange,4]


for i in range(500,2500):
plt.hlines(macnum[i],procstart[i],procfinish[i],colors = colormapd[1])
plt.show()

Błąd:

IndexError: index 2000 is out of bounds for axis 0 with size 2000

Myślę, że potrzebuję, aby móc wektoryzować (jobnum% 10) tablicę używaną do uzyskania dostępu do słownika.

plt.hlines(macnum,procstart,procfinish,colors = colormapd[jobnum%10])

Jestem w stanie uruchomić:

plt.hlines(macnum,procstart,procfinish)

Ale chcę zmienić kolory linii zgodnie z liczbą zleceń. Mam 2500+ miejsc pracy. Jakakolwiek inna metoda tworzenia wykresu Gantta, jeśli lepiej można by ją zasugerować.

Odpowiedzi:

0 dla odpowiedzi № 1

Twoje tablice mają indeksy 0-1999, a nie 500-2499. Więc kiedy pętla for osiągnie 2000, indeks znajduje się poza końcem tablic.

Aby ustawić poszczególne kolory, należy przekazać tablicę z kolorami odpowiadającymi danym. Podobnie jak w przypadku:

colors = np.array([colormapd[i%10] for i in therange])

for i in range(50,250):
plt.hlines(macnum,procstart,procfinish,colors=colors)
plt.show()

0 dla odpowiedzi nr 2

Czy w swoim pytaniu można podać pełne informacje zwrotne, ale nie wiadomo, w której linii kod się nie udaje.

mógłbyś również opublikować fragment pliku csv i część tablicy.

Biorąc to pod uwagę, jeśli masz 2000 pozycji w pliku csv, twój indeks pierwszego przedmiotu będzie wynosił 0, a twój ostatni 1999

twój 2000 element w twojej tablicy jest naprawdę na indeksie 1999 od indeksowania tablicy zaczyna się od 0.

również użyj numpy.arange (start, end), a nie macierzystego zakresu Pythona. i pamiętaj, że arange i range nie zawierają punktu końcowego.

tutaj jest przykładowy kod

macnum = np.arange(5,26)
procstart = np.linspace(0.0,23.5,21)
procend = procstart + .5

print macnum, len(macnum)
print procstart, len(procstart)
print procend, len(procend)

pierwsze trzy argumenty plt.hlines mogą przyjmować tablice, więc po prostu przekazuj swoje tablice bezpośrednio do funkcji.

plt.hlines(macnum, procstart, procend)
plt.show()

Matplotlib ma wbudowane mapy kolorów, ale nie jestem do końca pewien, jak z nich korzystać.