2010-05-27 19 views
20

Quiero arreglar el rango de color en múltiples diagramas de dispersión y agregar una barra de color a cada gráfico (que será el mismo en cada figura). Esencialmente, estoy arreglando todos los aspectos de los ejes y el espacio de color, etc. para que las tramas sean directamente comparables a simple vista.Color de fijación en diagramas de dispersión en matplotlib

Por mi vida, parece que no puedo entender todas las formas de arreglar el rango de color. He intentado vmin, vmax, pero parece que no hace nada, también he intentado clim (x, y) y eso tampoco parece funcionar.

Esto debe aparecer aquí y allá, no puedo ser el único que quiera comparar varios subconjuntos de datos entre parcelas ... así que, ¿cómo se arreglan los colores para que cada información mantenga su color entre parcelas? y no se reasigna a un color diferente debido al cambio en max/min del subconjunto -v- todo el conjunto?

Respuesta

40

El ajuste vmin y vmax debería hacer esto.

He aquí un ejemplo:

import matplotlib.pyplot as plt 

xyc = range(20) 

plt.subplot(121) 
plt.scatter(xyc[:13], xyc[:13], c=xyc[:13], s=35, vmin=0, vmax=20) 
plt.colorbar() 
plt.xlim(0, 20) 
plt.ylim(0, 20) 

plt.subplot(122) 
plt.scatter(xyc[8:20], xyc[8:20], c=xyc[8:20], s=35, vmin=0, vmax=20) 
plt.colorbar() 
plt.xlim(0, 20) 
plt.ylim(0, 20) 

plt.show() 

Y la trama Esto produce:

alt text http://i45.tinypic.com/2qsqvrk.png

+0

Hola Tom! ¡Sí! Este es exactamente el tipo de cosa que quería. Sin embargo, sí usó sub-parcelas, en lugar de dos imágenes separadas, lo que puede ser mi caída. Estaba a punto de probar subtramas con una gran página de trazado de 6 páginas como ejemplo (que sí siguió esta regla). Me pregunto si el vmin/vmax está roto en imágenes separadas. ¡Usaré tu ejemplo y lo probaré esta tarde o mañana y regresaré con mis resultados! Voy a tener una marca de verificación para usted cuando regrese lo más probable! :) Gracias por publicar una respuesta !! Nos vemos dentro de 24 horas aquí. ¡¡¡¡Aclamaciones!!!! (Rocío de montaña extra para usted, señor!) – AllenH

+0

simplemente eché un vistazo al ejemplo, me encanta, me explicó algunas cosas al mismo tiempo. Es interesante ver que la subtrama está asociada con todos los plt. * 'S debajo de ella. He estado usando manijas para eso. Voy a alterar el ejemplo de parcelas individuales ahora. :) – AllenH

+0

Ok! Usando el ejemplo simple anterior, y simplemente trazando cada figura por separado (cómo estaba trabajando con mi conjunto de datos), ¡el color se mantuvo! ¡muy contento de que también lo haya sido! LOL. Entonces, tal vez sea mi uso de la barra de errores debajo de mi comando scatter ... pero lo investigaré. ¡Me has demostrado que funciona! :) Gracias, Tom! – AllenH

0

Ok, esto no es realmente una respuesta, sino un seguimiento. Los resultados de mi codificación alterando el código de Tom anterior. [no estoy seguro de querer eliminar la marca de verificación de respuesta, ya que el código anterior funciona, y es una respuesta a la pregunta!]

¡Parece que no funciona para mis datos! A continuación se muestra el código modificado que se puede utilizar con mis datos para producir una trama que no me funcionaba por alguna extraña razón. La entrada vino a través de las funciones h5py (importación de archivos de datos hdf5).

En la lista siguiente, rf85 es un subconjunto de las matrices para el gran lote de experimentos donde la potencia de RF aplicada al sistema fue de aproximadamente 85 vatios en adelante. Básicamente estoy cortando y cortando los datos de varias maneras para intentar ver una tendencia. Estos son los 85 vatios en comparación con el conjunto de datos completo que es la entrada actual (hay más datos, pero esto es lo que tengo por ahora).

import numpy 
import matplotlib.pyplot as plt 

CurrentsArray = [array([ 0.83333333, 0.8  , 0.57142857, 0.83333333, 1.03333333, 
     0.25  , 0.81666667, 0.35714286, 0.26  , 0.57142857, 
     0.83333333, 0.47368421, 0.80645161, 0.47368421, 0.52631579, 
     0.36666667, 0.47368421, 0.57142857, 0.47368421, 0.47368421, 
     0.47368421, 0.47368421, 0.47368421, 0.61764706, 0.81081081, 
     0.41666667, 0.47368421, 0.47368421, 0.45  , 0.73333333, 
     0.8  , 0.8  , 0.8  , 0.47368421, 0.45  , 
     0.47368421, 0.83333333, 0.47368421, 0.22222222, 0.32894737, 
     0.57142857, 0.83333333, 0.83333333, 1.  , 1.  , 
     0.46666667])] 

growthTarray = [array([ 705., 620., 705., 725., 712., 705., 680., 680., 620., 
     660., 660., 740., 721., 730., 720., 720., 730., 705., 
     690., 705., 680., 715., 705., 670., 705., 705., 650., 
     725., 725., 650., 650., 650., 714., 740., 710., 717., 
     737., 740., 660., 705., 725., 650., 710., 703., 700., 650.])] 

CuSearray = [array([ 0.46395015, 0.30287259, 0.43496888, 0.46931773, 0.47685844, 
     0.44894925, 0.50727844, 0.45076198, 0.44977095, 0.41455029, 
     0.38089693, 0.98174953, 0.48600461, 0.65466528, 0.40563053, 
     0.22990327, 0.54372179, 0.43143358, 0.92515847, 0.73701742, 
     0.64152173, 0.52708783, 0.51794063, 0.49  , 0.48878252, 
     0.45119732, 0.2190089 , 0.43470776, 0.43509758, 0.52697697, 
     0.21576805, 0.32913721, 0.48828072, 0.62201997, 0.71442359, 
     0.55454867, 0.50981136, 0.48212956, 0.46  , 0.45732419, 
     0.43402525, 0.40290777, 0.38594786, 0.36777306, 0.36517926, 
     0.29880924])] 

PFarray = [array([ 384., 285., 280., 274., 185., 185., 184., 184., 184., 
     184., 184., 181., 110., 100., 100., 100., 85., 85., 
     84., 84., 84., 84., 84., 84., 84., 84., 84., 
     84., 84., 84., 84., 84., 27., 20., 5., 5., 
      1., 0., 0., 0., 0., 0., 0., 0., 0., 0.])] 

rf85growthTarray = [array([ 730., 705., 690., 705., 680., 715., 705., 670., 705., 
     705., 650., 725., 725., 650., 650., 650.])] 

rf85CuSearray = [array([ 0.54372179, 0.43143358, 0.92515847, 0.73701742, 0.64152173, 
     0.52708783, 0.51794063, 0.49  , 0.48878252, 0.45119732, 
     0.2190089 , 0.43470776, 0.43509758, 0.52697697, 0.21576805, 
     0.32913721])] 

rf85PFarray = [array([ 85., 85., 84., 84., 84., 84., 84., 84., 84., 84., 84., 
     84., 84., 84., 84., 84.])] 

rf85CurrentsArray = [array([ 0.54372179, 0.43143358, 0.92515847, 0.73701742, 0.64152173, 
     0.52708783, 0.51794063, 0.49  , 0.48878252, 0.45119732, 
     0.2190089 , 0.43470776, 0.43509758, 0.52697697, 0.21576805, 
     0.32913721])] 

Datavmax = max(max(CurrentsArray)) 
Datavmin = min(min(CurrentsArray)) 

plt.subplot(121) 
plt.scatter(growthTarray, CuSearray, PFarray, CurrentsArray, vmin=Datavmin, vmax=Datavmax, alpha=0.75) 
plt.colorbar() 
plt.xlim(600,760) 
plt.ylim(0,2.5) 

plt.subplot(122) 
plt.scatter(rf85growthTarray, rf85CuSearray, rf85PFarray, rf85CurrentsArray, vmin=Datavmin, vmax=Datavmax, alpha=0.75) 
plt.colorbar() 
plt.xlim(600,760) 
plt.ylim(0,2.5) 

plt.show() 

Y, por último, la salida:

colorfailed! http://i50.tinypic.com/21b6c7k.png

Tenga en cuenta que esta no es la salida perfecta para mi trabajo, pero yo no agotar esfuerzos por lo que es perfecto. Sin embargo, lo que es importante: los puntos de datos que reconocerá como iguales entre los diagramas no contienen el mismo color como debería ser el caso basado en el uso vmin vmax anterior (como sugiere el código de Tom).

Esto es una locura. :(¡Espero que alguien pueda aclararme esto! Estoy seguro de que mi código no es tan bueno, así que por favor no te preocupes por ofender de todos modos cuando se trata de mi código !!

Bolsa extra de Cheetos firey caliente a cualquier persona que pueda sugerir un camino a seguir -Allen

Actualización: Tom10 captó el problema -. había utilizado inadvertidamente los datos erróneos para una de mis sub-series, haciendo que los valores a dar diferentes niveles de color de lo esperado (es decir, mis datos estaban equivocados!) Grandes apoyos para Tom por esto- Desearía poder darle otro voto positivo, pero debido a mi método de hacer esta pregunta, no puedo (lo siento Tom !)

Consulte también su maravilloso ejemplo de trazado de texto en las posiciones de datos que se mencionan a continuación.

Aquí es una imagen actualizada mostrando que el método de Tom trabaja de hecho, y que el trazado era un problema en mi propio código: alt text http://i50.tinypic.com/2ljgh8i.png

+1

Esto se debe a que sus valores de color son diferentes en cada trazado (es decir, CurrentsArray y rf85CurrentsArray tienen valores diferentes en la misma coordenada xey). Por ejemplo, el pequeño punto alrededor de 1.0 en el eje y tiene el valor de color 0.47368421 en el primer gráfico y 0.92515847 en el segundo. Puedes ver que escribes el valor al lado de cada punto usando plt.text (x, y, val). – tom10

+0

Por cierto, creo que hubiera sido mejor preguntar esto como una pregunta separada en lugar de publicar esta segunda pregunta como una respuesta. Aquí tengo que responder en un comentario que tiene todo tipo de limitaciones: sin código, sin cifras, sin formateo, etc., etc. Es decir, su primera pregunta fue "cómo usar la misma escala de colores", su segunda pregunta es más de un "qué pasa con mi código". – tom10

+0

¡Ah! Gracias por el puntero, Tom! Soy nuevo en Stackoverflow, así que poco a poco estoy pensando en cómo hacerlo. :). ¡Lo aprecio! ¡Definitivamente miraré los valores cuidadosamente! ¡No deberían ser diferentes! ¡Problema con mi trabajo para producirlos si es así! ¡Gracias! – AllenH

Cuestiones relacionadas