2010-12-18 10 views
23

In Python, mit Matplotlib, einfach ein Streudiagramm mit Transparenz (Alpha < 1), aber mit einem Farbbalken, der ihren Farbwert darstellt, aber Alpha = hat 1?Partiell transparentes Streudiagramm, aber mit einem Vollfarbbalken

Hier ist das, was man bekommt, mit from pylab import *; scatter(range(10), arange(0, 100, 10), c=range(10), alpha=0.2); color_bar = colorbar():

alt text

Wie kann der Farbbalken aus nicht-transparent sein?

PS: Ich habe versucht color_bar.set_alpha(1); draw(), aber das hat nichts tun ...

+0

Aber da es ein Streudiagramm ist, was würde der Farbbalken anzeigen? Sollte es der Größe jedes Punktes "s" oder der Farbe jedes Punktes "c" entsprechen? –

+0

@Steve: Der Farbbalken würde die Farbe der Punkte zuordnen. – EOL

Antwort

25

Okay, fand ich einen Weg, es zu tun, das relativ sauber aussieht: (mit dem ColorBar Objekt aus der Frage)

color_bar.set_alpha(1) 
color_bar.draw_all() 
# pylab.draw() or pyplot.draw() might be necessary 

Es wäre toll, eine bekommen Bestätigung, dass dies der stabilste Weg ist, um fortzufahren! :)

+0

Oh, 'draw_all'. Interessant. –

+0

Was ist, wenn ich die Farbbalken-Etiketten nicht möchte? 'draw_all()' lässt die Beschriftungen erscheinen, auch wenn ich 'color_bar.ax.set_yticklabels ([])' gesetzt habe. –

+0

Ich bin mir nicht sicher, wie ich das machen soll ... Ich habe versucht, die Farbbalkenachsen zuerst zu löschen ('color_bar.ax.cla()'), aber das erneute Zeichnen der Farbleiste mit 'draw_all()' schlägt fehl. – EOL

9

Dies ist ein großer, hässlicher Hack. Aber kein anderer Weg würde funktionieren. Vielleicht kann sich jemand anders verbessern.

fig1 = pylab.figure() 
fig2 = pylab.figure() 
ax1 = fig1.add_subplot(111) 
ax2 = fig2.add_subplot(111) 
ax1.scatter(range(10), range(10), c=range(10), alpha=0.2) 
im = ax2.scatter(range(10), range(10), c=range(10), alpha=1.0) 
fig1.colorbar(im, ax=ax1) 
fig1.show() 

alt text

+0

+1: interessante Idee! Ein Nachteil ist, dass Sie eine zusätzliche Zahl erhalten, wenn 'pyplot.show()' aufgerufen wird (das könnte zerstört werden, wohl ...). – EOL

+0

Tatsächlich schafft es eine neue Figur. Das war wirklich eine "letzte Ausweg" -Lösung. :-) –