color - scatter plot python pandas
¿Cómo hacer un diagrama de dispersión con círculos vacíos en Python? (5)
¿Funcionarían?
plt.scatter(np.random.randn(100), np.random.randn(100), facecolors=''none'')
o usando plot ()
plt.plot(np.random.randn(100), np.random.randn(100), ''o'', mfc=''none'')
En Python, con Matplotlib, ¿cómo se puede trazar un diagrama de dispersión con círculos vacíos ? El objetivo es dibujar círculos vacíos alrededor de algunos de los discos de colores ya graficados por scatter()
, para resaltarlos, idealmente sin tener que volver a dibujar los círculos de colores.
Aquí hay otra forma: esto agrega un círculo a los ejes, trama o imagen actual o lo que sea:
from matplotlib.patches import Circle # $matplotlib/patches.py
def circle( xy, radius, color="lightsteelblue", facecolor="none", alpha=1, ax=None ):
""" add a circle to ax= or current axes
"""
# from .../pylab_examples/ellipse_demo.py
e = Circle( xy=xy, radius=radius )
if ax is None:
ax = pl.gca() # ax = subplot( 1,1,1 )
ax.add_artist(e)
e.set_clip_box(ax.bbox)
e.set_edgecolor( color )
e.set_facecolor( facecolor ) # "none" not None
e.set_alpha( alpha )
(Los círculos en la imagen quedan aplastados en elipses porque imshow aspect="auto"
).
Así que supongo que quiere resaltar algunos puntos que se ajustan a ciertos criterios. Puede usar el comando de Prelude para hacer un segundo diagrama de dispersión de los puntos resaltados con un círculo vacío y una primera llamada para trazar todos los puntos. Asegúrese de que el parámetro sea lo suficientemente pequeño para que los círculos vacíos más grandes encierren a los más pequeños.
La otra opción es no usar dispersión y dibujar los parches individualmente usando el comando círculo / elipse. Estos están en matplotlib.patches, here hay un código de muestra sobre cómo dibujar círculos rectángulos, etc.
De la documentation para scatter:
Optional kwargs control the Collection properties; in particular:
edgecolors:
The string ‘none’ to plot faces with no outlines
facecolors:
The string ‘none’ to plot unfilled outlines
Pruebe lo siguiente:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(60)
y = np.random.randn(60)
plt.scatter(x, y, s=80, facecolors=''none'', edgecolors=''r'')
plt.show()
Nota: Para otros tipos de gráficos, consulte esta publicación sobre el uso de markeredgecolor
y markerfacecolor
.
En matplotlib 2.0 hay un parámetro llamado fillstyle
que permite un mejor control sobre la forma en que se llenan los marcadores. En mi caso lo he usado con las barras de error pero funciona para los marcadores en general http://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.errorbar.html
fillstyle
acepta los siguientes valores: [''full'' | ''izquierda'' | ''correcto'' | ''abajo'' | ''arriba'' | ''ninguna'']
Hay dos cosas importantes a tener en cuenta al usar fillstyle
,
1) Si mfc se establece en cualquier tipo de valor, tendrá prioridad, por lo tanto, si configuraste el estilo de relleno como "ninguno", no tendría efecto. Así que evita usar mfc en conjunción con fillstyle
2) Es posible que desee controlar el ancho del borde del marcador (usando markeredgewidth
o mew
) porque si el marcador es relativamente pequeño y el ancho del borde es grueso, los marcadores parecerán rellenados aunque no lo sean.
A continuación se muestra un ejemplo que usa barras de error:
myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt=''o'', fillstyle=''none'', ecolor=''blue'', mec=''blue'')