Seite 1 von 1

Scatter matplotlib

Verfasst: Sonntag 24. März 2019, 13:17
von Hypec
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()

Re: Scatter matplotlib

Verfasst: Sonntag 24. März 2019, 15:01
von ThomasL
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

Re: Scatter matplotlib

Verfasst: Sonntag 24. März 2019, 15:08
von Hypec
Ja es alle 3 Werte sind Listen.

Re: Scatter matplotlib

Verfasst: Sonntag 24. März 2019, 16:00
von __blackjack__
@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.

Re: Scatter matplotlib

Verfasst: Sonntag 24. März 2019, 16:07
von ThomasL
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()