Pandas groupby 散点图在单个图中

Ven*_*lam 4 python matplotlib pandas

这是关于此解决方案的后续问题。会自动分配不同的颜色,kind=line但对于散点图则不然。

import pandas as pd
import matplotlib.pylab as plt
import numpy as np

# random df
df = pd.DataFrame(np.random.randint(0,10,size=(25, 3)), columns=['label','x','y'])

# plot groupby results on the same canvas 
fig, ax = plt.subplots(figsize=(8,6))
df.groupby('label').plot(kind='scatter', x = "x", y = "y", ax=ax)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这里有一个相关的问题。有什么简单的解决方法吗?

更新:

当我尝试使用@ImportanceOfBeingErnest 针对包含字符串的列推荐的解决方案时label,它不起作用!

df = pd.DataFrame(np.random.randint(0,10,size=(5, 2)), columns=['x','y'])
df['label'] = ['yes','no','yes','yes','no']
fig, ax = plt.subplots(figsize=(8,6))
ax.scatter(x='x', y='y', c='label', data=df) 
Run Code Online (Sandbox Code Playgroud)

它抛出以下错误,

ValueError:无效的 RGBA 参数:“是”

在处理上述异常的过程中,又出现了一个异常:

Qua*_*ang 8

您可以使用sns

df = pd.DataFrame(np.random.randint(0,10,size=(100, 2)), columns=['x','y'])
df['label'] = np.random.choice(['yes','no','yes','yes','no'], 100)
fig, ax = plt.subplots(figsize=(8,6))
sns.scatterplot(x='x', y='y', hue='label', data=df) 
plt.show()
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

另一种选择是评论中建议的:按分类类型将值映射到数字:

fig, ax = plt.subplots(figsize=(8,6))
ax.scatter(df.x, df.y, c = pd.Categorical(df.label).codes, cmap='tab20b')
plt.show()
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述