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()