2010-12-18 24 views
23

En Python, con Matplotlib, cómo hacer simplemente un diagrama de dispersión con transparencia (alpha < 1), pero con una barra de color que representa su valor de color, pero tiene alfa = 1?Diagrama de dispersión parcialmente transparente, pero con una barra de color sólido

Aquí es lo que se obtiene, con from pylab import *; scatter(range(10), arange(0, 100, 10), c=range(10), alpha=0.2); color_bar = colorbar():

alt text

¿Cómo puede la barra de colores hacerse no transparente?

PS: He intentado color_bar.set_alpha(1); draw(), pero esto no hizo nada ...

+0

Pero dado que es un diagrama de dispersión, ¿qué indicaría la barra de color? ¿Debe corresponderse con el tamaño de cada punto, 's', o el color de cada punto,' c'? –

+0

@Steve: la barra de color asignaría el color de los puntos. – EOL

Respuesta

25

bien, he encontrado una manera de hacerlo, que se ve relativamente limpio: (utilizando el objeto ColorBar de la cuestión)

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

Sería muy bueno para obtener una ¡Sin embargo, es una confirmación de que esta es la manera más robusta de proceder! :)

+0

Oh, 'draw_all'. Interesante. –

+0

¿Qué sucede si no quiero las etiquetas de la barra de color? 'draw_all()' hace aparecer las etiquetas incluso si configuré 'color_bar.ax.set_yticklabels ([])'. –

+0

No estoy seguro de cómo hacer esto ... Intenté borrar los ejes de la barra de colores primero ('color_bar.ax.cla()'), pero luego dibujé la barra de color nuevamente con 'draw_all()' falla. – EOL

9

Esta es una enorme, feo corte. Pero de ninguna otra manera funcionaría. Tal vez alguien más puede mejorar.

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: ¡idea interesante! Una desventaja es que obtienes una cifra adicional cuando se llama a 'pyplot.show()' (que podría destruirse, podría decirse ...). – EOL

+0

De hecho, crea una nueva figura. Esa fue realmente una solución de "último recurso". :-) –

Cuestiones relacionadas