Erstellen von nach einem Schlüssel kategorisierten Streudiagrammen in Pandas DataFrames
In der Datenvisualisierung werden Streudiagramme häufig verwendet, um Beziehungen zwischen numerischen Variablen zu erkennen. Wenn jedoch zusätzliche kategoriale Variablen zur Analyse beitragen, ist es notwendig, diese im Streudiagramm darzustellen. Diese Frage untersucht eine effiziente Möglichkeit, zwei Variablen darzustellen und gleichzeitig die dritte als diskrete Kategorien zu übermitteln.
Zunächst wurden Versuche mit df.groupby unternommen, die jedoch nicht die gewünschten Ergebnisse erbrachten. Der bereitgestellte Beispiel-DataFrame dient zur Veranschaulichung des Problems:
import numpy as np import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame(np.random.normal(10, 1, 30).reshape(10, 3), index=pd.date_range('2010-01-01', freq='M', periods=10), columns=('one', 'two', 'three')) df['key1'] = (4, 4, 4, 6, 6, 6, 8, 8, 8, 8) fig1 = plt.figure(1) ax1 = fig1.add_subplot(111) ax1.scatter(df['one'], df['two'], marker='o', c=df['key1'], alpha=0.8) plt.show()
Dieser Ansatz färbt die Markierungen erfolgreich entsprechend der Spalte „key1“, es fehlt jedoch eine Legende zur Unterscheidung der Kategorien. Um beides zu erreichen, ist eine andere Methode erforderlich.
Die Lösung besteht darin, Plot statt Streudiagramm zu verwenden, da Plot besser für diskrete Kategorien geeignet ist:
import matplotlib.pyplot as plt import numpy as np import pandas as pd np.random.seed(1974) # Generate Data num = 20 x, y = np.random.random((2, num)) labels = np.random.choice(['a', 'b', 'c'], num) df = pd.DataFrame(dict(x=x, y=y, label=labels)) groups = df.groupby('label') # Plot fig, ax = plt.subplots() ax.margins(0.05) # Optional, just adds 5% padding to the autoscaling for name, group in groups: ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name) ax.legend() plt.show()
Dieser Code generiert ein Streudiagramm Dabei wird jede Kategorie durch eine eindeutige Markierung und eine Legende dargestellt, die die Kategorien klar beschriftet.
Für ein individuelleres Erscheinungsbild können Sie den Pandas-Stil integrieren, indem Sie rcParams aktualisieren und seinen Farbgenerator verwenden:
import matplotlib.pyplot as plt import numpy as np import pandas as pd np.random.seed(1974) # Generate Data num = 20 x, y = np.random.random((2, num)) labels = np.random.choice(['a', 'b', 'c'], num) df = pd.DataFrame(dict(x=x, y=y, label=labels)) groups = df.groupby('label') # Plot plt.rcParams.update(pd.tools.plotting.mpl_stylesheet) colors = pd.tools.plotting._get_standard_colors(len(groups), color_type='random') fig, ax = plt.subplots() ax.set_color_cycle(colors) ax.margins(0.05) for name, group in groups: ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name) ax.legend(numpoints=1, loc='upper left') plt.show()
Diese Modifikation verleiht der Handlung den klassischen Pandas-Stil mit einem optisch ansprechenderen Farbschema.
Das obige ist der detaillierte Inhalt vonWie erstelle ich mit Matplotlib ein Streudiagramm mit kategorialen Daten in Pandas?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!