it-swarm.com.de

Matplotlib Scatterplot; Farbe als Funktion einer dritten Variablen

Ich möchte ein Streudiagramm (mit matplotlib) erstellen, in dem die Punkte gemäß einer dritten Variablen schattiert sind. Ich bin dem sehr nahe gekommen:

plt.scatter(w, M, c=p, marker='s')

wobei w und M die Datenpunkte sind und p die Variable ist, auf die ich schattieren möchte.
Allerdings möchte ich es eher in Graustufen als in Farbe machen. Kann jemand helfen?

136
Thomas Collett

Sie müssen die Farben nicht manuell einstellen. Geben Sie stattdessen eine Graustufen-Farbzuordnung an ...

import numpy as np
import matplotlib.pyplot as plt

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

# Plot...
plt.scatter(x, y, c=y, s=500)
plt.gray()

plt.show()

enter image description here

Oder, wenn Sie ein größeres Spektrum an Farbkarten bevorzugen, können Sie auch cmap kwarg bis scatter angeben. Um die umgekehrte Version von diesen zu verwenden, geben Sie einfach "_r "Version von einem von ihnen. Zum Beispiel gray_r anstelle von gray. Es sind verschiedene Graustufen-Farbkarten vorgefertigt (z. B. gray, Gist_yarg, binary, etc).

import matplotlib.pyplot as plt
import numpy as np

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

plt.scatter(x, y, c=y, s=500, cmap='gray')
plt.show()
140
Joe Kington

In matplotlib können graue Farben als Zeichenfolge mit einem numerischen Wert zwischen 0 und 1 angegeben werden.
Beispielsweise c = '0.1'

Dann können Sie Ihre dritte Variable in einen Wert innerhalb dieses Bereichs konvertieren und damit Ihre Punkte einfärben.
Im folgenden Beispiel habe ich die y-Position des Punktes als Wert verwendet, der die Farbe bestimmt:

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [125, 32, 54, 253, 67, 87, 233, 56, 67]

color = [str(item/255.) for item in y]

plt.scatter(x, y, s=500, c=color)

plt.show()

enter image description here

25
joaquin

Manchmal müssen Sie Farbe genau auf der Grundlage des x-Wertes darstellen. Beispielsweise haben Sie möglicherweise einen Datenrahmen mit 3 Variablentypen und einigen Datenpunkten. Und du willst folgendes tun,

  • Zeichnen Sie Punkte, die der physikalischen Variablen 'A' entsprechen, in ROT.
  • Zeichnen Sie Punkte entsprechend der physikalischen Variable 'B' in BLAU.
  • Zeichnen Sie Punkte, die der physikalischen Variablen 'C' in GRÜN entsprechen.

In diesem Fall müssen Sie möglicherweise in die Kurzfunktion schreiben, um die x-Werte den entsprechenden Farbnamen als Liste zuzuordnen, und diese Liste dann an den Befehl plt.scatter Weiterleiten.

x=['A','B','B','C','A','B']
y=[15,30,25,18,22,13]

# Function to map the colors as a list from the input list of x variables
def pltcolor(lst):
    cols=[]
    for l in lst:
        if l=='A':
            cols.append('red')
        Elif l=='B':
            cols.append('blue')
        else:
            cols.append('green')
    return cols
# Create the colors list using the function above
cols=pltcolor(x)

plt.scatter(x=x,y=y,s=500,c=cols) #Pass on the list created by the function here
plt.grid(True)
plt.show()

Coloring scatter plot as a function of x variable

6
Tirtha