python - 来自熊猫数据框的散点图上的 Matplotlib 图例
问题描述
我正在尝试在下图中正确显示图例。它应该只是具有相应颜色的“绿色”、“蓝色”和“红色”。但它无处不在。
代码如下:
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/在第二部分“带组的散点图”中,但这不是基于熊猫数据框)。
解决方案
您可以使用 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()
输出:
推荐阅读
- java - 如何在 Java 中使用 String.format 将当前系统日期时间格式化为 UTC?
- java - {JAVA} 矩形碰撞检测
- websocket - WebSocket 握手期间出错,意外响应代码:502 使用 elasticache redis 和弹性 beanstalk
- android - 使用导航组件重新加载片段
- javascript - 将 JSON 标准化为自定义模式
- java - 如何转换地图
到地图 > 以最简单的方式 - r - 使用 tbl_summary 创建带有标签的汇总统计信息
- label - (莲花笔记)表单中的标签可以设置显示条件吗?
- c - 对于 Ackermann 函数而言,数字太大的分段错误
- python-3.x - 如何使用全局变量