/ / Jak wykreślić ile razy każdy element znajduje się na liście [closed] - python, matplotlib

Jak wykreślić ile razy każdy element znajduje się na liście [closed] - python, matplotlib

Próbuję zrobić coś nieznacznie, co nie byłoby trudne, ale nie mogę wymyślić, jak uzyskać python / matplotlib / pylab do zrobienia.

Biorąc pod uwagę dane wejściowe, chcę histogram, który pokazuje mi ile razy pojawia się każdy element.

Biorąc pod uwagę listę

x=range(10)

Chciałabym mieć wyjście, które ma pojedynczy pasek, wartość y równą 10, równą x = 1, żadnych innych wykresów.

podana lista

x=range(10)
x.append(1)

Chciałbym, aby na wyjściu były dwa takty: a wartość 9 dla x = 1, a wartość 1 dla x = 2. Jak mogę to zrobić?

Odpowiedzi:

8 dla odpowiedzi № 1

Ten kod daje histogram podobny do tego, który lubisz:

import matplotlib.pyplot as plt
import numpy as np
y = np.array([0,1,2,3,4,5,6,7,8,9,1])
plt.hist(y);
plt.show()

5 dla odpowiedzi nr 2

Coś takiego? Ten kod używa Licznik zliczać liczbę wystąpień obiektu w tablicy (w tym przypadku licząc ile razy na liście znajduje się liczba całkowita).

import matplotlib.pyplot as plt
from collections import Counter

# Create your list
x = range(10)
x.append(1)

# Use a Counter to count the number of instances in x
c = Counter(x)

plt.bar(c.keys(), c.values())
plt.show()

1 dla odpowiedzi nr 3

Będziesz oczywiście musiał zacząć od zliczenia elementów:

>>> from collections import Counter
>>> counts = Counter(my_iterator)

Następnie chcemy policzyć te liczby:

>>> count_von_count = Counter(counts)

Następnie masz rozmiar swoich pasków. Utwórz go na liście i narysuj:

>>> bars = [count_von_count[i] for i in range(max(count_von_count) + 1)]

Przykład Twojej rozszerzonej listy:

>>> from collections import Counter
>>> counts = Counter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1])
>>> counts
Counter({1: 2, 0: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1})
>>> count_von_count = Counter(counts.values())
>>> count_von_count
Counter({1: 9, 2: 1})
>>> bars = [count_von_count[i] for i in range(max(count_von_count) + 1)]
>>> bars
[0, 9, 1]

0 dla odpowiedzi nr 4

Jeśli zbierzesz swoje dane do listy list, możesz zrobić coś takiego:

import numpy as np
import matplotlib.pyplot as plt

x = [range(10)]
x.append([1])

count = map(len, x)
plt.bar(range(len(count)), count)
plt.show()

wprowadź opis obrazu tutaj

Zauważ, że pierwszy słupek ma wysokość 10, a nie 9. Nie wiem, czy to jest to, czego pragniesz, lub jeśli nie rozumiem twojej intencji.