Diese Antwort verwendet matplotlib.
Um die erste Frage zuerst zu beantworten: Sie müssen herausfinden, wie oft die Daten einen Punkt an einer gegebenen Koordinate erzeugen, um die Punkte mit Anmerkungen versehen zu können. Wenn alle Werte ganze Zahlen sind, kann dies leicht mit einem 2D-Histogramm durchgeführt werden. Aus dem hstogram würde man dann wählen Sie nur die Bins, wo der Zählwert nicht Null ist und die entsprechenden Werte in einer Schleife mit Anmerkungen versehen:
x = [3, 0, 1, 2, 2, 0, 1, 3, 3, 3, 4, 1, 4, 3, 0]
y = [1, 0, 4, 3, 2, 1, 4, 0, 3, 0, 4, 2, 3, 3, 1]
import matplotlib.pyplot as plt
import numpy as np
x = np.array(x)
y = np.array(y)
hist, xbins,ybins = np.histogram2d(y,x, bins=range(6))
X,Y = np.meshgrid(xbins[:-1], ybins[:-1])
X = X[hist != 0]; Y = Y[hist != 0]
Z = hist[hist != 0]
fig, ax = plt.subplots()
ax.scatter(x,y, s=49, alpha=0.4)
for i in range(len(Z)):
ax.annotate(str(int(Z[i])), xy=(X[i],Y[i]), xytext=(4,0),
textcoords="offset points")
plt.show()
Sie können dann entscheiden, nicht alle Punkte zu zeichnen, aber das Ergebnis von der Histogrammierung, die die Möglichkeit bietet, die Farbe und die Größe der Streupunkte zu ändern,
ax.scatter(X,Y, s=(Z*20)**1.4, c = Z/Z.max(), cmap="winter_r", alpha=0.4)
Da alle Werte ganze Zahlen sind, können Sie auch für ein Bild Grundstück entscheiden kann,
fig, ax = plt.subplots()
ax.imshow(hist, cmap="PuRd")
for i in range(len(Z)):
ax.annotate(str(int(Z[i])), xy=(X[i],Y[i]), xytext=(0,0), color="w",
ha="center", va="center", textcoords="offset points")
Ohne die necesity die Anzahl der Vorkommen zu berechnen, ist eine weitere Option, um ein hexbin Grundstück zu verwenden. Dies ergibt etwas ungenaue Positionen der Punkte, du zu dem hexagonalen Binning, aber ich wollte diese Option noch erwähnen.
import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np
x = np.array(x)
y = np.array(y)
fig, ax = plt.subplots()
cmap = plt.cm.PuRd
cmaplist = [cmap(i) for i in range(cmap.N)]
cmaplist[0] = (1.0,1.0,1.0,1.0)
cmap = matplotlib.colors.LinearSegmentedColormap.from_list('mcm',cmaplist, cmap.N)
ax.hexbin(x,y, gridsize=20, cmap=cmap, linewidth=0)
plt.show()
@ImportanceOfBeingErnest Ich bin für diese Entschuldigung. Ich hoffe, es sieht besser aus! (könnte wegen meinem schlechten Englisch sein!) – renakre
In Matplotlib gibt es keinen automatischen Weg, um zu tun, was Sie wollen. (Ich weiß aber nichts über Plot). Möglicherweise müssen Sie herausfinden, welche Punkte sich überlappen, möglicherweise mithilfe eines numpy histogram2d oder einer Panda-Pivot-Tabelle. Dann könnten Sie die Punkte mit Anmerkungen versehen (z. B. mit matplotlib.text). – ImportanceOfBeingErnest
@ImportanceOfBeingErnest Haben Sie eine Empfehlung, die Daten mit einem anderen Diagramm darzustellen? – renakre