Frage

In Python mit Matplotlib, wie kann ein Streudiagramm mit leer Kreise gezeichnet werden? Ziel ist es, leere Kreise zu ziehen um einig der farbigen Platten bereits von scatter() aufgetragen, um sie zu markieren, im Idealfall, ohne dass die farbigen Kreise neu zu zeichnen.

Ich habe versucht facecolors=None, ohne Erfolg.

War es hilfreich?

Lösung

Von der Dokumentation Streuung:

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

Versuchen Sie Folgendes:

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

Beispielbild

Hinweis: Für andere Arten von Parzellen finden Sie unter dieser Beitrag über die Verwendung von markeredgecolor und markerfacecolor.

Andere Tipps

würde diese Arbeit?

plt.scatter(np.random.randn(100), np.random.randn(100), facecolors='none')

Beispielbild

oder mit plot ()

plt.plot(np.random.randn(100), np.random.randn(100), 'o', mfc='none')

Beispielbild

Hier ist eine andere Art und Weise: Dies fügt einen Kreis auf den aktuellen Achsen, Grundstück oder ein Bild oder was auch immer:

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 )

alt text

(Die Kreise im Bild zu Ellipsen zerquetscht erhalten, weil imshow aspect="auto").

In matplotlib 2.0 gibt es einen Parameter namens fillstyle das ermöglicht eine bessere Kontrolle über die Art und Weise Marker gefüllt ist. In meinem Fall habe ich es mit Fehlerbalken verwendet, aber es funktioniert für Marker im Allgemeinen http://matplotlib.org/api/_as_gen/matplotlib.axes. Axes.errorbar.html

fillstyle akzeptiert die folgenden Werte: [ ‚voll‘ | ‚Links‘ | ‚Rechts‘ | ‚Bottom‘ | 'Nach oben' | ‚None‘]

Es gibt zwei wichtige Dinge im Auge zu behalten, wenn fillstyle verwenden,

1) Wenn mfc auf jede Art von Wert gesetzt wird Priorität wird daher, wenn Sie Satz FillStyle tun ‚none‘ wäre es nicht wirksam. So vermeiden Sie mfc in conjuntion mit FillStyle

2) Sie könnten die Markierungskantenbreite (mit markeredgewidth oder mew), weil steuern möchten, wenn der Marker relativ klein ist und die Kantenbreite dick ist, werden die Markierungen wie gefüllt aussehen, obwohl sie es nicht sind.

Es folgt ein Beispiel mit Fehlerbalken:

myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue',  mec='blue')

Also gehe ich davon aus Sie einige Punkte hervorheben wollen, die bestimmten Kriterien entsprechen. Sie können Prelude Befehl zu tun, um eine zweite Streudiagramm der hightlighted Punkte mit einem leeren Kreis und einem ersten Anruf plotten alle Punkte verwenden. Achten Sie darauf, die s Paramter ausreichend klein ist für die größeren leeren Kreise die kleineren gefüllt diejenigen einzuschließen.

Die andere Option ist nicht streuen zu verwenden und die Patches einzeln mit dem Kreis / Ellipse Befehl zu zeichnen. Diese sind in matplotlib.patches, hier ist ein Beispielcode, wie Kreise zu zeichnen Rechtecke, etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top