2016-07-01 9 views
0

Ich versuche, ein Streudiagramm von zwei Arrays/Listen, von denen die x-Koordinate und die andere die y ist. Ich habe damit keine Probleme. Allerdings muss ich diese Punkte basierend auf ihren Werten zu einem bestimmten Zeitpunkt farbcodieren, basierend auf Daten, die ich in einem 2D-Array habe. Auch dieses 2D-Datenfeld hat eine sehr große Streuung, daher möchte ich die Punkte logarithmisch einfärben (ich bin mir nicht sicher, ob das bedeutet, nur die Farbbalkenbeschriftungen zu ändern oder ob es einen grundlegenderen Unterschied gibt.)Färbung matplotlib Streudiagramm durch dritte Variable mit Protokoll Farbbalken

Hier ist mein Code so weit:

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure(1) 

time = #I'd like to specify time here. 

x = [1, 2, 3, 4, 5] 
y = [5, 4, 3, 2, 1] 

multi_array = [[1, 1, 10, 100, 1000], [10000, 1000, 100, 10, 1], [300, 400, 5000, 12, 47]] 

for counter in np.arange(0, 5): 
    t = multi_array[time, counter] #I tried this, and it did not work. 
    s = plt.scatter(x[counter], y[counter], c = t, marker = 's') 

plt.show() 

ich den Rat folgte ich durch eine dritte Variable anderswo Farbe sah, die die Farbe gleich diese variablen gesetzt war, aber dann, als ich versuchte, dass meine Daten-Set mit , Ich habe gerade alle Punkte als eine Farbe bekommen, und dann, wenn ich es mit diesem Modell versuche, gibt es mir den folgenden Fehler:

TypeError: list indices must be integers, not tuple 

Könnte mir bitte jemand helfen, meine Punkte so zu färben, wie ich es brauche?

Antwort

0

Nach einigem Tüfteln und unter Verwendung von Informationen aus user4421975 Antwort gelernt und die Link in den Kommentaren, ich habe es verblüfft. Kurz gesagt, ich benutzte plkt.scatter's Norm Feature/Attribut/Ding, um mit den Farben herumzuspielen und sie logarithmisch zu machen.

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure(1) 

time = 2 

x = [1, 2, 3, 4, 5] 
y = [5, 4, 3, 2, 1] 

multi_array = np.asarray([[1, 1, 10, 100, 1000], [10000, 1000, 100, 10, 1], [300, 400, 5000, 12, 47]]) 

for counter in np.arange(0, 5): 
    s = plt.scatter(x[counter], y[counter], c = multi_array[time, counter], cmap = 'winter', norm = matplotlib.colors.LogNorm(vmin=multi_array[time].min(), vmax=multi_array[time].max()), marker = 's',) 

cb = plt.colorbar(s) 
cb.set_label('Log of Data') 

plt.show() 
2

Wenn ich verstehe die Frage (was ich bin nicht sicher, ob off) ist hier die Antwort:

import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 
fig = plt.figure(1) 

time = 2 #I'd like to specify time here. 

x = [1, 2, 3, 4, 5] 
y = [5, 4, 3, 2, 1] 

multi_array = np.asarray([[1, 1, 10, 100, 1000], [10000, 1000, 100, 10, 1], [300, 400, 5000, 12, 47]]) 
log_array=np.log10(multi_array) 
s = plt.scatter(x, y, c=log_array[time], marker = 's',s=100) 
cb = plt.colorbar(s) 
cb.set_label('log of ...') 
plt.show() 

enter image description here

+0

Das war hilfreich, aber nicht ganz das, was ich meinte. Ich möchte nicht das Protokoll der Daten nehmen und es färben, ich möchte die Farbe logarithmisch ändern. Wenn das Sinn macht? – evtoh

+0

So ähnlich. [http://matplotlib.org/examples/pylab_examples/pcolor_log.html](http://matplotlib.org/examples/pylab_examples/pcolor_log.html) – evtoh

Verwandte Themen