Wie erstelle ich mit Matplotlib ein Streudiagramm mit kategorialen Daten in Pandas?

Susan Sarandon
Freigeben: 2024-11-18 08:55:03
Original
841 Leute haben es durchsucht

How to create a scatter plot with categorical data in Pandas using matplotlib?

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()
Nach dem Login kopieren

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()
Nach dem Login kopieren

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()
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage