plotta
Hej!
Hur ska jag plotta min def? Jag har definierat de fem minsta värden ur min lista men jag vill plotta den (plotta den i en graf som jag har kodat och markerat andra saker). Men har ingen aning hur.
Tack på förhand! :)
Använder du pyplot?
plt.plot(x,y,...)
Dina 5 minsta värden kanske då ligger i y?
Vilka är de tillhörande x-värfena?
Dr. G skrev:Använder du pyplot?
plt.plot(x,y,...)
Dina 5 minsta värden kanske då ligger i y?
Vilka är de tillhörande x-värfena?
har använt detta:
def hej(list1, N):
....new_list = []
....for i in range(0, N):
........print(list1)
........min1 = 0
........for j in range(len(list1)):
............if list1[j] > min1:
................min1 = list1[j];
........list1.remove(min1);
........new_list.append(min1)
........print("smallest numbers are ",new_list)
tidigare har jag använt x =månader och nu vill jag plotta de månader som hör ihop med de minsta värdena (y).
En variant är att du först kopierar originallistan list1 innan du tar bort element med list1.remove(min1).
Sedan kan du hitta vilket index i list1 som ger ett visst värde, t.ex
index = list1.index(value)
Aktuell månad och platsen i list1 är sedan kopplade mef samma index.
Fast kanske bättre att plocka ut motsvarande element i den andra listan i samband med
................min1 = list1[j]
så lägg till
................year = list2[j]
där list2 är listan med årtal.
Dr. G skrev:Fast kanske bättre att plocka ut motsvarande element i den andra listan i samband med
................min1 = list1[j]
så lägg till
................year = list2[j]
där list2 är listan med årtal.
menar du att jag inte ska kopiera och använda istället year=list2[j]?
Jag tänker att om du har
list2 = [1,2,3,4,5,6,7,8,9]
list1 = [2,3,0,1,6,6,7,0,5]
så kan du i din if-sats lägga till en rad
............if list1[j] > min1:
................min1 = list1[j]
................time1 = list2[j]
så blir värdet min1 kopplat till tidpunkten time1.
Din funktion kan sedan returnera talpar (time1,min1).
Dr. G skrev:Jag tänker att om du har
list2 = [1,2,3,4,5,6,7,8,9]
list1 = [2,3,0,1,6,6,7,0,5]
så kan du i din if-sats lägga till en rad
............if list1[j] > min1:
................min1 = list1[j]................time1 = list2[j]
så blir värdet min1 kopplat till tidpunkten time1.
Din funktion kan sedan returnera talpar (time1,min1).
Nu har jag gjort så:
def hej(list1, N):
....new_list = []
....time1=[]
....for i in range(0, N):
........print(list1)
........min1 = 0
........for j in range(len(list1)):
............if list1[j] < min1:
................min1 = list1[j]
................time1 = list2[j]
........list1.remove(min1);
........new_list.append(min1)
.......plt.plot(time1,min1,'k*',markersize=10)
........print("smallest numbers are ",new_list)
Koden funkar men den markerar felställen. :/ Det hämnar några cm utanför det område som de ska ligga. Vad ska jag göra? :(
Här är en variant. Klistrar in en skärmdump för att inte sabba indenteringen.
Jag skapar två tomma listor. Min-värdet sätts först till listans första element. Listan gås igenom och min-värdet uppdateras om några mindre värden finns.
Sedan gås listan igenom en gång till och när minsta värdet hittas så läggs min-värdet till den nya listan. Även den aktuella "tidpunkten" sparas i en annan lista. Sedan sätter jag det minsta elementet till ett (förhoppningsvis tillräckligt) stort tal så att det inte hittas i nästa varv i loopen.
Loopen startar om för ett nytt i-värde. Till slut returneras två listor.
(Det går antagligen att koda det hela betydligt snyggare!)
Dr. G skrev:Här är en variant. Klistrar in en skärmdump för att inte sabba indenteringen.
Jag skapar två tomma listor. Min-värdet sätts först till listans första element. Listan gås igenom och min-värdet uppdateras om några mindre värden finns.
Sedan gås listan igenom en gång till och när minsta värdet hittas så läggs min-värdet till den nya listan. Även den aktuella "tidpunkten" sparas i en annan lista. Sedan sätter jag det minsta elementet till ett (förhoppningsvis tillräckligt) stort tal så att det inte hittas i nästa varv i loopen.
Loopen startar om för ett nytt i-värde. Till slut returneras två listor.
(Det går antagligen att koda det hela betydligt snyggare!)
tack så mycket för din förklaring! :)