MatPlotLib: Mehrere Datensätze auf demselben Streudiagramm


76

Ich möchte mehrere Datensätze auf demselben Streudiagramm zeichnen:

cases = scatter(x[:4], y[:4], s=10, c='b', marker="s")
controls = scatter(x[4:], y[4:], s=10, c='r', marker="o")

show()

Das Obige zeigt nur die neuesten scatter()

Ich habe auch versucht:

plt = subplot(111)
plt.scatter(x[:4], y[:4], s=10, c='b', marker="s")
plt.scatter(x[4:], y[4:], s=10, c='r', marker="o")
show()

1
Es ist auf derselben Linie überdruckt.
nate c

Antworten:


122

Sie benötigen einen Verweis auf ein AxesObjekt, um weiterhin auf demselben Unterplot zeichnen zu können.

import matplotlib.pyplot as plt

x = range(100)
y = range(100,200)
fig = plt.figure()
ax1 = fig.add_subplot(111)

ax1.scatter(x[:4], y[:4], s=10, c='b', marker="s", label='first')
ax1.scatter(x[40:],y[40:], s=10, c='r', marker="o", label='second')
plt.legend(loc='upper left');
plt.show()

Geben Sie hier die Bildbeschreibung ein


11
Was bedeutet 111in fig.add_subplot(111)bedeuten?
Temak

2
Es ist die Anordnung der Untergraphen in diesem Diagramm. Die erste Zahl gibt an, wie viele Zeilen von Unterplots vorhanden sind. Die zweite Zahl gibt an, wie viele Spalten von Unterplots vorhanden sind. Die dritte Zahl ist der Untergraph, über den Sie gerade sprechen. In diesem Fall gibt es eine Zeile und eine Spalte mit Untergraphen (dh einen Untergraphen), und die Achsen sprechen über den ersten von ihnen. So etwas wie fig.add_subplot (3,2,5) wäre das untere linke Unterplot in einem Raster aus drei Zeilen und zwei Spalten.
Neil Smith

26

Ich bin auf diese Frage gestoßen, da ich genau das gleiche Problem hatte. Obwohl die akzeptierte Antwort gut funktioniert, aber mit der matplotlib-Version 2.1.0ist es ziemlich einfach, zwei Streudiagramme in einem Diagramm zu haben, ohne einen Verweis auf zu verwendenAxes

import matplotlib.pyplot as plt

plt.scatter(x,y, c='b', marker='x', label='1')
plt.scatter(x, y, c='r', marker='s', label='-1')
plt.legend(loc='upper left')
plt.show()

7

Ich weiß nicht, es funktioniert gut für mich. Genaue Befehle:

import scipy, pylab
ax = pylab.subplot(111)
ax.scatter(scipy.randn(100), scipy.randn(100), c='b')
ax.scatter(scipy.randn(100), scipy.randn(100), c='r')
ax.figure.show()

1
Meine Datensätze überlappten sich :)
Austin Richardson

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.