2016-08-03 14 views
0

sagen, dass ich ein regelmäßiges Gitter von nxn Punkte haben, und ein Wörterbuch mich, wie oft etwas passiert in jedem der Punkte sagen:Python: Zeichne Scatter mit Markergröße aus einem Wörterbuch?

d={ 
(0, 0): 1114, 
(0, 1): 270, 
(3, 2): 217, 
(5, 6): 189, 
(10, 10): 164} 

Ich möchte eine Streuung dieser Punkte zeichnen, die Größe der Markierungen werden durch den entsprechenden Wert des Diktats zugewiesen. Wie kann ich das tun?

Ich weiß, ich kann eine Streuung wie diese zeichnen, aber wie Struktur s, die Liste der Größen?

#Import section 
#defining d 
xticks = [0,1,2,3,4,5,6,7,8,9,10] 
yticks = [0,1,2,3,4,5,6,7,8,9,10] 
plt.xticks(xticks) 
plt.yticks(yticks) 
plt.xlabel("x") 
plt.ylabel("y",rotation=0) 
plt.title('my map') 
s=[] #How to structure this? 
plt.scatter(x, y,color='yellow',s=s) 
plt.show() 

Antwort

2

XY und S sind alle parallel Listen, so dass für jeden x[n]-y[n] und s[n] corrospond wird. Sie können nur das Wörterbuch durchlaufen und gleichzeitig an alle drei Listen anhängen:

x_arr,y_arr,s_arr = [], [], [] 
for (x,y),s in d.items(): 
    x_arr.append(x) 
    y_arr.append(y) 
    s_arr.append(s) 
plt.scatter(x_arr, y_arr,color='yellow',s=s_arr) 

Es gibt wahrscheinlich effizientere Wege, dies zu erreichen, aber das zeigt, wie der Eingang strukturiert werden soll.

+0

Ich bin mir nicht sicher, ist es möglich, dass einer (oder einige) so groß sind, dass sie die meisten anderen Datenpunkte verdecken? Vielleicht müssen Sie den 's' Werten eine Division hinzufügen, um extreme Werte zu verarbeiten. –

+0

Fixed it, danke. Ich hätte 'x_arr' und' y_arr' als Argumente zuweisen sollen. – FaCoffee

+1

Ach ja, das war meine Schuld, weil ich die Variablennamen geändert habe, froh, dass du es herausgefunden hast! –