outside legends examples example python matplotlib legend scatter-plot

legends - scatter plot python example



Leyenda del diagrama de dispersiĆ³n de Matplotlib (1)

Creé un gráfico de diagrama de dispersión 4D para representar diferentes temperaturas en un área específica. Cuando creo la leyenda, la leyenda muestra el símbolo y el color correcto, pero agrega una línea a través de él. El código que estoy usando es:

colors=[''b'', ''c'', ''y'', ''m'', ''r''] lo = plt.Line2D(range(10), range(10), marker=''x'', color=colors[0]) ll = plt.Line2D(range(10), range(10), marker=''o'', color=colors[0]) l = plt.Line2D(range(10), range(10), marker=''o'',color=colors[1]) a = plt.Line2D(range(10), range(10), marker=''o'',color=colors[2]) h = plt.Line2D(range(10), range(10), marker=''o'',color=colors[3]) hh = plt.Line2D(range(10), range(10), marker=''o'',color=colors[4]) ho = plt.Line2D(range(10), range(10), marker=''x'', color=colors[4]) plt.legend((lo,ll,l,a, h, hh, ho),(''Low Outlier'', ''LoLo'',''Lo'', ''Average'', ''Hi'', ''HiHi'', ''High Outlier''),numpoints=1, loc=''lower left'', ncol=3, fontsize=8)

Traté de cambiar Line2D a Scatter y scatter . Scatter devolvió un error y scatter cambió el gráfico y devolvió un error.

Con scatter , cambié el range(10) a las listas que contienen los puntos de datos. Cada lista contiene la variable x, y o z.

lo = plt.scatter(xLOutlier, yLOutlier, zLOutlier, marker=''x'', color=colors[0]) ll = plt.scatter(xLoLo, yLoLo, zLoLo, marker=''o'', color=colors[0]) l = plt.scatter(xLo, yLo, zLo, marker=''o'',color=colors[1]) a = plt.scatter(xAverage, yAverage, zAverage, marker=''o'',color=colors[2]) h = plt.scatter(xHi, yHi, zHi, marker=''o'',color=colors[3]) hh = plt.scatter(xHiHi, yHiHi, zHiHi, marker=''o'',color=colors[4]) ho = plt.scatter(xHOutlier, yHOutlier, zHOutlier, marker=''x'', color=colors[4]) plt.legend((lo,ll,l,a, h, hh, ho),(''Low Outlier'', ''LoLo'',''Lo'', ''Average'', ''Hi'', ''HiHi'', ''High Outlier''),scatterpoints=1, loc=''lower left'', ncol=3, fontsize=8)

Cuando ejecuto esto, la leyenda ya no existe, es una pequeña caja blanca en la esquina sin nada en ella.

¿Algún consejo?


Diagrama de dispersión 2D

El uso del método scatter del módulo matplotlib.pyplot debería funcionar (al menos con matplotlib 1.2.1 con Python 2.7.5), como en el código de ejemplo siguiente. Además, si usa diagramas de dispersión, use scatterpoints=1 lugar de numpoints=1 en la llamada de leyenda para tener solo un punto por cada entrada de leyenda.

En el siguiente código he usado valores aleatorios en lugar de trazar el mismo rango una y otra vez, haciendo visibles todas las gráficas (es decir, sin solaparnos entre sí).

import matplotlib.pyplot as plt from numpy.random import random colors = [''b'', ''c'', ''y'', ''m'', ''r''] lo = plt.scatter(random(10), random(10), marker=''x'', color=colors[0]) ll = plt.scatter(random(10), random(10), marker=''o'', color=colors[0]) l = plt.scatter(random(10), random(10), marker=''o'', color=colors[1]) a = plt.scatter(random(10), random(10), marker=''o'', color=colors[2]) h = plt.scatter(random(10), random(10), marker=''o'', color=colors[3]) hh = plt.scatter(random(10), random(10), marker=''o'', color=colors[4]) ho = plt.scatter(random(10), random(10), marker=''x'', color=colors[4]) plt.legend((lo, ll, l, a, h, hh, ho), (''Low Outlier'', ''LoLo'', ''Lo'', ''Average'', ''Hi'', ''HiHi'', ''High Outlier''), scatterpoints=1, loc=''lower left'', ncol=3, fontsize=8) plt.show()

Diagrama de dispersión 3D

Para trazar una dispersión en 3D, utilice el método de plot , ya que la leyenda no es compatible con Patch3DCollection como lo devuelve el método de scatter de una instancia de Axes3D . Para especificar el estilo de marcador, puede incluirlo como un argumento posicional en la llamada al método, como se ve en el ejemplo a continuación. Opcionalmente, uno puede incluir argumentos tanto para el estilo linestyle como para los parámetros del marker .

import matplotlib.pyplot as plt from numpy.random import random from mpl_toolkits.mplot3d import Axes3D colors=[''b'', ''c'', ''y'', ''m'', ''r''] ax = plt.subplot(111, projection=''3d'') ax.plot(random(10), random(10), random(10), ''x'', color=colors[0], label=''Low Outlier'') ax.plot(random(10), random(10), random(10), ''o'', color=colors[0], label=''LoLo'') ax.plot(random(10), random(10), random(10), ''o'', color=colors[1], label=''Lo'') ax.plot(random(10), random(10), random(10), ''o'', color=colors[2], label=''Average'') ax.plot(random(10), random(10), random(10), ''o'', color=colors[3], label=''Hi'') ax.plot(random(10), random(10), random(10), ''o'', color=colors[4], label=''HiHi'') ax.plot(random(10), random(10), random(10), ''x'', color=colors[4], label=''High Outlier'') plt.legend(loc=''upper left'', numpoints=1, ncol=3, fontsize=8, bbox_to_anchor=(0, 0)) plt.show()