来自熊猫数据框的散点图上的 Matplotlib 图例

Alh*_*lta 3 python matplotlib scatter-plot pandas

我试图在下图中获得正确的图例。它应该只是带有相应颜色的“绿色”、“蓝色”和“红色”。但它无处不在。 在此处输入图片说明

代码如下:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
        'category':['blue','green','red','blue','green','red','blue','green','red'],
        'attempts':[8955,7881,6723,100,200,300,4567,876,54],
        'success':[3000,7500,2000, 256,4567,4567,7665,543,43]
})
fig,ax = plt.subplots()
plt.scatter(df['attempts'],df['success'],c=df['category'],label=df['category'])
plt.legend(loc=2)
plt.savefig('scatter.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)

我该如何做对?(这里有一个类似的:https : //pythonspot.com/matplotlib-scatterplot/在第二部分“带组的散点图”中,但这不是基于熊猫数据框)。

Qua*_*ang 6

您可以使用 seaborn 的scatterplot

fig,ax = plt.subplots()
sns.scatterplot(data=df, hue='category', x='attempts', y='success')
plt.legend(loc=2)
plt.savefig('scatter.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入代码

或纯 matplotlib:

fig,ax = plt.subplots()
for k,d in df.groupby('category'):
    ax.scatter(d['attempts'], d['success'], label=k)
plt.legend(loc=2)
plt.savefig('scatter.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明


Imp*_*est 6

如果你想在 matplotlib 中使用单个散点图,它看起来像这样:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

df = pd.DataFrame({
        'category':['blue','green','red','blue','green','red','blue','green','red'],
        'attempts':[8955,7881,6723,100,200,300,4567,876,54],
        'success':[3000,7500,2000, 256,4567,4567,7665,543,43]
})

u, inv = np.unique(df.category.values, return_inverse=True)
cmap = ListedColormap(u)

fig,ax = plt.subplots()
scatter = plt.scatter(df['attempts'],df['success'],c=inv, cmap=cmap)
plt.legend(scatter.legend_elements()[0], u, loc=2)
plt.savefig('scatter.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述