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()
Austin Richardson
quelle
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

nate c
quelle
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()
Sohaib Farooqi
quelle
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()
Steve Tjoa
quelle
1
Meine Datensätze überlappten sich :)
Austin Richardson