首页  >  文章  >  后端开发  >  如何使用 matplotlib 在 Pandas 中创建包含分类数据的散点图?

如何使用 matplotlib 在 Pandas 中创建包含分类数据的散点图?

Susan Sarandon
Susan Sarandon原创
2024-11-18 08:55:03843浏览

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

在 Pandas DataFrames 中创建按键分类的散点图

在数据可视化中,散点图通常用于辨别数值变量之间的关系。然而,当有其他分类变量有助于分析时,就有必要在散点图中表示它们。本问题探讨了一种绘制两个变量的有效方法,同时将第三个变量作为离散类别进行表达。

最初,尝试使用 df.groupby,但没有产生预期的结果。提供的示例 DataFrame 用于说明问题:

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()

此方法成功地根据“key1”列为标记着色,但缺少用于区分类别的图例。要实现这两个目标,需要采用不同的方法。

解决方案是使用绘图而不是散点图,因为绘图更适合离散类别:

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()

此代码生成散点图每个类别都由独特的标记和清楚地标记类别的图例表示。

要获得更加自定义的外观,您可以通过更新来合并 Pandas 风格rcParams 并利用其颜色生成器:

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()

此修改将为情节提供经典的 Pandas 风格以及更具视觉吸引力的配色方案。

以上是如何使用 matplotlib 在 Pandas 中创建包含分类数据的散点图?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn