如何通过在 Python 中分组来分发相同的数据

How to distribute the same data by grouping in Python

我有一个 table 如下所示。

根据上面的table,我想绘制3维特征的分布。它包括三种 class ,例如正常、高和低。我为此创建了以下代码。

%matplotlib inline
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

labels = df.class_type
for l in labels:
   attr1 = df.X1
   attr2 = df.X2
   attr3 = df.X3
   ax.scatter(xs = attr1, ys = attr2, zs = attr3, label = "normal")
   ax.scatter(xs = attr1, ys = attr2, zs = attr3, label = "hyper")
   ax.scatter(xs = attr1, ys = attr2, zs = attr3, label = "hypo")

ax.set_title("1.Grup")
ax.set_xlabel("atr1")
ax.set_ylabel("atr2")
ax.set_zlabel("atr3")

plt.show()

但是我想画一个像下面这样的情节。我该怎么做?提前致谢

我找到了答案。 我做了一个例子而不是你的数据框。 首先,创建一个数据框。

%matplotlib inline
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import pandas as pd
import itertools

df = pd.DataFrame({'class_att': [1, 1, 2, 2, 3, 3],
                   'X1': [100, 110, 120, 130, 140, 150],
                   'X2': [10, 20, 30, 40, 50, 60],
                   'X3': [50, 60, 70, 80, 90, 100],
                   'class_type': ['normal', 'normal', 'hyper', 'hyper', 'hypo', 'hypo']})

您可以创建一个组作为 groupby() 的函数。

groups = df.groupby('class_type')

然后画散点图就大功告成了

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

colors = itertools.cycle(["r", "b", "g"])
for name, group in groups:
    print(group)
    ax.scatter(xs=group.X1, ys=group.X2, zs=group.X3, label=name, color=next(colors), alpha=1)

ax.legend()
plt.show()