Problem: Wenn in Matplotlib Plotten Mehrere Histogramme, ich kann keine Handlung von einem anderen unterscheidenPlotten Mehrere Histogramme in Matplotlib - Farben oder Side-by-Side-Bars
Problem als Image: ** ** Minor Problem: Die linke Bezeichnung 'Count' ist teilweise außerhalb des Bildes. Warum?
Beschreibung
ich das Histogramm der drei verschiedenen Sätzen darstellen möchten. Jeder Satz ist ein Array mit Nullen und Einsen. Ich möchte das Histogramm von jedem, so dass ich Ungleichgewichte auf dem Datensatz erkennen kann.
Ich habe sie separat gezeichnet, aber ich wollte eine Grafik von ihnen zusammen.
Es wäre okay, eine andere Grafik mit Balken nebeneinander zu haben, oder ich googelte sogar über das Plotten als 3D, aber ich weiß nicht, wie einfach es wäre, die Grafik zu "lesen" oder zu "sehen" und verstehe es.
Gerade jetzt, ich will den [Zug] plotten, [Validierung] und [Test] Bars an jeder Seite auf der gleiche Grafik, etwa wie folgt:
PS: Meine googeln gab keinen Code zurück, der für mich verständlich war. Auch würde ich gerne wenn jemand überprüfen würde, ob ich Wahnsinn auf meinem Code tun.
Vielen Dank Jungs!
Code:
def generate_histogram_from_array_of_labels(Y=[], labels=[], xLabel="Class/Label", yLabel="Count", title="Histogram of Trainset"):
plt.figure()
plt.clf()
colors = ["b", "r", "m", "w", "k", "g", "c", "y"]
information = []
for index in xrange(0, len(Y)):
y = Y[index]
if index > len(colors):
color = colors[0]
else:
color = colors[index]
if labels is None:
label = "?"
else:
if index < len(labels):
label = labels[index]
else:
label = "?"
unique, counts = np.unique(y, return_counts=True)
unique_count = np.empty(shape=(unique.shape[0], 2), dtype=np.uint32)
for x in xrange(0, unique.shape[0]):
unique_count[x, 0] = unique[x]
unique_count[x, 1] = counts[x]
information.append(unique_count)
# the histogram of the data
n, bins, patches = plt.hist(y, unique.shape[0], normed=False, facecolor=color, alpha=0.75, range=[np.min(unique), np.max(unique) + 1], label=label)
xticks_pos = [0.5 * patch.get_width() + patch.get_xy()[0] for patch in patches]
plt.xticks(xticks_pos, unique)
plt.xlabel(xLabel)
plt.ylabel(yLabel)
plt.title(title)
plt.grid(True)
plt.legend()
# plt.show()
string_of_graphic_image = cStringIO.StringIO()
plt.savefig(string_of_graphic_image, format='png')
string_of_graphic_image.seek(0)
return base64.b64encode(string_of_graphic_image.read()), information
bearbeiten
Im Anschluss an die Antwort von Hash-Code, dieser neue Code:
def generate_histogram_from_array_of_labels(Y=[], labels=[], xLabel="Class/Label", yLabel="Count", title="Histogram of Trainset"):
plt.figure()
plt.clf()
colors = ["b", "r", "m", "w", "k", "g", "c", "y"]
to_use_colors = []
information = []
for index in xrange(0, len(Y)):
y = Y[index]
if index > len(colors):
to_use_colors.append(colors[0])
else:
to_use_colors.append(colors[index])
unique, counts = np.unique(y, return_counts=True)
unique_count = np.empty(shape=(unique.shape[0], 2), dtype=np.uint32)
for x in xrange(0, unique.shape[0]):
unique_count[x, 0] = unique[x]
unique_count[x, 1] = counts[x]
information.append(unique_count)
unique, counts = np.unique(Y[0], return_counts=True)
histrange = [np.min(unique), np.max(unique) + 1]
# the histogram of the data
n, bins, patches = plt.hist(Y, 1000, normed=False, alpha=0.75, range=histrange, label=labels)
#xticks_pos = [0.5 * patch.get_width() + patch.get_xy()[0] for patch in patches]
#plt.xticks(xticks_pos, unique)
plt.xlabel(xLabel)
plt.ylabel(yLabel)
plt.title(title)
plt.grid(True)
plt.legend()
produziert diese:
- New Edit:
def generate_histogram_from_array_of_labels(Y=[], labels=[], xLabel="Class/Label", yLabel="Count", title="Histogram of Trainset"):
plt.figure()
plt.clf()
information = []
for index in xrange(0, len(Y)):
y = Y[index]
unique, counts = np.unique(y, return_counts=True)
unique_count = np.empty(shape=(unique.shape[0], 2), dtype=np.uint32)
for x in xrange(0, unique.shape[0]):
unique_count[x, 0] = unique[x]
unique_count[x, 1] = counts[x]
information.append(unique_count)
n, bins, patches = plt.hist(Y, normed=False, alpha=0.75, label=labels)
plt.xticks((0.25, 0.75), (0, 1))
plt.xlabel(xLabel)
plt.ylabel(yLabel)
plt.title(title)
plt.grid(True)
plt.legend()
arbeitet jetzt aber, das Etikett von der linken Seite ist ein bisschen außerhalb der Grenzen und ich wollte besser die Bars zum Zentrum ... Wie kann ich das tun ?
Sie haben den Parameter 'bins' entfernt, standardmäßig ist er auf 10 gesetzt. Fügen Sie einfach einen bins param wie folgt hinzu:' n, bins, patches = plt.hist (Y, bins = 2, normiert = False, alpha = 0.75, range = histrange, label = labels) ' – hashcode55
Haben Sie versucht, die Bins auf 2 zu setzen? – hashcode55
Und in Bezug auf das Etikett nicht angezeigt wird, ich denke, es ist ein maschinenspezifisches Problem. Sie können versuchen, den Subplot anzupassen ... Überprüfen Sie dies http://matplotlib.org/examples/pylab_examples/subplots_adjust.html – hashcode55