9 svar
205 visningar
mon_12 behöver inte mer hjälp
mon_12 113 – Fd. Medlem
Postad: 24 dec 2019 21:22 Redigerad: 25 dec 2019 00:10

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! :) 

Dr. G 9500
Postad: 24 dec 2019 23:21

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?

mon_12 113 – Fd. Medlem
Postad: 25 dec 2019 00:13 Redigerad: 25 dec 2019 00:14
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). 

Dr. G 9500
Postad: 25 dec 2019 17:32

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. 

Dr. G 9500
Postad: 25 dec 2019 18:39

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. 

mon_12 113 – Fd. Medlem
Postad: 25 dec 2019 18:40
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]?

Dr. G 9500
Postad: 25 dec 2019 19:47

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).

mon_12 113 – Fd. Medlem
Postad: 25 dec 2019 23:09 Redigerad: 25 dec 2019 23:59
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? :( 

Dr. G 9500
Postad: 26 dec 2019 16:08

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!)

mon_12 113 – Fd. Medlem
Postad: 26 dec 2019 17:38 Redigerad: 26 dec 2019 17:50
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! :) 

Svara
Close