Scatter matplotlib

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Hallo,
ich will mit dieser Funktion einen Plot erstellen wo Punkte wenn das Label 1 ist rot angezeigt werden und wenn das Label -1 ist blau angezeigt werden. Das Problem ist wenn der letzte Punkt als Label 1 hat werden alle Punkte Rot angezeigt und wenn das Label -1 ist werden alle Punkte blau angezeigt. Was muss ich hier anderst machen das jeder Punkt die Farbe bekommt die seinem Label zugeordnet ist?

Code: Alles auswählen

def show(x,y,label) :
        fig, ax = plt.subplots(figsize=(5,5))
        for l in label:
            if l == 1:
                color='red'
                ax.scatter(x, y, c=color, label=color)
            elif l == -1: 
                color='blue'
                ax.scatter(x, y, c=color, label=color)

        ax.legend()
        plt.show()
Benutzeravatar
ThomasL
User
Beiträge: 1384
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

was übergibst du denn der Funktion show() als x,y,label ?
Sind das alles drei Listen?
Auf die Schnelle würde ich sagen, erstelle x,y für alle Label 1 für ax.scatter in rot
und dann x,y für alle Label -1 für ax.scatter in blau
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Hypec
User
Beiträge: 183
Registriert: Mittwoch 1. August 2018, 16:11

Ja es alle 3 Werte sind Listen.
Benutzeravatar
__blackjack__
User
Beiträge: 14211
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Hypec: Du plottest für jedes Label immer *alle* Punkte in *einer* Farbe *übereinander*. Da bleibt natürlich sichtbar am Ende natürlich nur noch die Farbe in der als letztes alles geplottet wurde. `color` sollte man auch eine Liste übergeben können die pro Punkt die Farbe enthält.
“Ich bin für die Todesstrafe. Wer schreckliche Dinge getan hat, muss eine angemessene Strafe bekommen. So lernt er seine Lektion für das nächste Mal.” — Britney Spears, Interview in der französischen Zeitung Libération, 2. April 2002
Benutzeravatar
ThomasL
User
Beiträge: 1384
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Ja, wie ich vermutete.
Versuchs mal so:

Code: Alles auswählen

def show(x, y, labels) :
        fig, ax = plt.subplots(figsize=(5,5))
        choice = {1: 'red', -1: 'blue'}
        color = [choice[label] for label in labels]
        ax.scatter(x, y, c=color)
        ax.legend()
        plt.show()
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten