用第三列值绘制pandas数据帧的第x和y列,确定点的形状

时间:2017-02-26 02:29:04

标签: python-3.x pandas dataframe plot

我有这个要求。我在一个文本文件中有一个示例数据,每行包含3个属性。 Test1得分,Test2得分和通过或失败表示为1或0。 例如: -

 Score1 Score2 Result
 35.00 55.00 0
 45.00 34.00 0
 50.00 75.00 0
 80.00 80.00 1
 55.00 85.00 1
 67.03 66.03 0
 ..
 ..

现在我试图将Score1与X轴和Score2对Y轴进行绘制,但我想将pass(1)表示为' +'而失败(0)为' o'当我绘制点和不同颜色时(例如' +'绿色,而#39; o'红色)

我在下面编写了如下代码: -

 pos=y[y==1]
 neg=y[y==0]
 get_ipython().magic('matplotlib inline')

 ax=X.plot(kind='scatter',x='Score1',y='Score2',s=pos*10,color='DarkGreen', label='Pass');        
 X.plot(kind='scatter', x='Score1', y='Score2', s=neg*200, color='Red',   label='Fail',ax=ax);

我不确定这是否正确,因为我只能看到传递结果的情节而不是我要求的颜色,而我的失败结果没有被绘制。 我在这做错了什么?

2 个答案:

答案 0 :(得分:2)

使用字典定义每种结果类型的标记
使用groupby迭代类型

m = {0: 'o', 1: '+'}
fig, ax = plt.subplots(1, 1)
for n, g in X.groupby('Result'):
    g.plot.scatter(
        'Score1', 'Score2', marker=m[n], ax=ax)

enter image description here

答案 1 :(得分:1)

您可以使用here进行过滤:

pos=y[y.Result==1]
neg=y[y.Result==0]

ax=pos.plot(kind='scatter',
            x='Score1',
            y='Score2',
            s=100,
            color='DarkGreen', 
            label='Pass', 
            marker='+')    

neg.plot(kind='scatter', 
         x='Score1', 
         y='Score2', 
         s=50, 
         color='Red',  
         label='Fail',
         marker='o',
         ax=ax)

patches, labels = ax.get_legend_handles_labels()
ax.legend(patches, labels, loc='upper left', scatterpoints=1)

boolean indexing