5
Próbuję wykreślić prosty histogram przy użyciu matplotlib. Mam na przykład (będę w praktyce używać różnych funkcji odległości)Histogramy Matplotlib (podstawowe pytania)
import matplotlib.pyplot as plt
import numpy as np
import itertools
def hamdist(str1, str2):
"""Count the # of differences between equal length strings str1 and str2"""
if (len(str1) != len(str2)):
print str1, str2, "Length mismatch bozo!!!!!!"
diffs = 0
for ch1, ch2 in itertools.izip(str1, str2):
if ch1 != ch2:
diffs += 1
return diffs
n = 10
bins=np.arange(0,n+2,1)
hamdists = []
for str1 in itertools.product('01', repeat = n):
for str2 in itertools.product('01', repeat = n):
hamdists.append(hamdist(str1, str2))
plt.hist(hamdists, bins=bins)
plt.show()
Otrzymuję histogram, który wygląda tak.
Jak zrobić następujące?
- Zmiana osi x tak, że ostatni bar zlicza dla x = 10. Jeśli po prostu zmienić
bins=np.arange(0,11,1)
ten odcina wartość dla x = 10. - Label każdy punkt w X- oś
- Przenieś etykiety osi X na środek słupków, a nie na początku tak jak teraz.
Kiedy ustawia się N = 10, i za pomocą pojemników = np.arange (0, n + 1,1) etykiety osi X nadal jedynie przejść do 9 . Dlaczego? W końcu ... Wolałbym nie mieć prawdziwych tyknięć, ponieważ są mylące w histogramie. – marshall
Ponieważ 9 jest początkiem ostatniego pojemnika. W swoim poście powiedziałeś, że chcesz wyświetlić tylko początek, wyśrodkowany poniżej paska. W rzeczywistości ten bin ma zakres od 9 do 10. Możesz zbadać wyniki, przechwytując wynik funkcji hist: 'hist, bins, bars = ax.hist()' –
Och dzięki. Tak więc jeden koniec od 9 do 10 nie może być zawarty w koszu. – marshall