来自 pandas 数据框的散点图中的 Matplotlib 图例

Posted

技术标签:

【中文标题】来自 pandas 数据框的散点图中的 Matplotlib 图例【英文标题】:Matplotlib Legend on Scatterplot from pandas dataframe 【发布时间】:2020-01-19 19:17:25 【问题描述】:

我正在尝试在下图中正确显示图例。它应该只是具有相应颜色的“绿色”、“蓝色”和“红色”。但它无处不在。

代码如下:

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

我怎样才能做到这一点? (这里有一个类似的:https://pythonspot.com/matplotlib-scatterplot/ 在第二部分“带有组的散点图”中,但这不是基于 pandas 数据框)。

【问题讨论】:

【参考方案1】:

你可以使用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()

输出:

或者纯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()

输出:

【讨论】:

我从来不知道能像这样使用 groupby。有没有可以参考的网络链接或一些文档,我可以在哪里阅读?不仅在绘图的上下文中,而且在它可能有用的任何其他上下文中 这是来自pandas doc,groupby() 返回一个GroupBy object,它有一个__iter__() 方法,它允许for ... in【参考方案2】:

如果你想在 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()

【讨论】:

以上是关于来自 pandas 数据框的散点图中的 Matplotlib 图例的主要内容,如果未能解决你的问题,请参考以下文章

来自 pandas 数据框的 2 列的 Seaborn 散点图

如何在python中的散点图中平滑数据点?

来自 Pandas 数据框的 Matplotlib 中堆积条形图中的标签问题

在基础R的散点图中转换图例的形状和颜色

散点图中的聚类和等高线

在 pandas 的散点矩阵中添加回归线