首页 > 解决方案 > 分别拆分散点图的数据框

问题描述

一个简单的数据框显示了不同游戏部门中团队的数据。

我想按团队拆分这个数据框,并在他们的分数和标记上制作散点图。

在此处输入图像描述

在屏幕上查看绘图时似乎工作正常。但是,当它们保存为文件时。奇怪的事情发生了(兔子有 6 个点而不是 3 个)。

在此处输入图像描述

在此处输入图像描述

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'Department':['Buy','Buy', 'Trade', 'Trade', 'Trade', 'Buy'],
               'Team':['Lion','Lion','Rabbit','Rabbit','Rabbit','Lion'],
               'Game':['a352','a425','a845','a846','a235','a526'],
               'Score':[7,8,9,4,2,3],
               'Mark':[1,3,5,7,1,2]}, columns = ['Department','Team','Game','Score','Mark'])

for each in df.groupby('Team'):
    plt.scatter(each[1]['Score'], each[1]['Mark'])
    plt.savefig('C:\\' + str(each[0]) + '.png')

什么是正确的方法?谢谢你。(顺便说一句,比“每个1 ['Score']”更好的方法是什么?)

标签: pythondataframematplotlib

解决方案


Rabbit 在同一张图上绘制 Rabbit 数据和 Lion 数据。

我怀疑这是因为plt在你的 for 循环中使用了相同的数字。尝试plt.figure()在循环的入口处添加,然后plt.close()在循环的出口(即结束)处添加,以每次 for创建和关闭一个新的。figure

像这样:

for each in df.groupby('Team'):
    plt.figure()
    plt.scatter(each[1]['Score'], each[1]['Mark'])
    plt.savefig('C:\\' + str(each[0]) + '.png')
    plt.close()

推荐阅读