Python:如何在绘制散点图时区分类别值?

时间:2019-04-15 15:02:24

标签: python matplotlib

我有一个dataframe,看起来像这样:

ContextID   EscAct_Curr_A   Outlier?
7289972 0.5622317497295798  True
7289973 0.5622317497295798  True
7289998 0.5793991301212501  False
7289999 0.5793991301212501  False
7290024 0.5665235864470339  False
7290025 0.5665235864470339  False

我想做的是绘制一个scatter plot,其中ContextID在x轴上,而EscAct_Curr_A在y轴上,并基于{{ 1}}列。所有那些True必须具有一种颜色,所有那些False必须具有其他不同的颜色。

2 个答案:

答案 0 :(得分:2)

import pandas as pd
import matplotlib.pyplot as plt

d = {'ContextID': [7289972, 7289973, 7289998], 'EscAct_Curr_A': [0.5622317497295798, 0.5622317497295798, 0.5793991301212501], 'Outlier': [True, True, False]}

df = pd.DataFrame(d)

plt.scatter(df.ContextID, df.EscAct_Curr_A, c=df.Outlier)

答案 1 :(得分:0)

我认为了解此操作的最简单方法是将问题分解并为正确/错误离群值绘制每张图并将它们组合在一起。下面的示例为您提供控制,并将向您展示如何稍微控制颜色。

框架是从您的示例中复制的。

frame.head()
Out:
   ContextID  EscAct_Curr_A  Outlier?
0    7289972       0.562232      True
1    7289973       0.562232      True
2    7289998       0.579399     False
3    7289999       0.579399     False
4    7290024       0.566524     False

# Create Objects
fig, ax= plt.subplots()

# Set Title
ax.set_title('Context ID vs EscAct_Curr_A, Color by Outliers')

# Scatter where outliers are true, color red
ax.scatter('ContextID', 'EscAct_Curr_A', c='r', data=frame.loc[frame.loc[:,'Outlier?']==True,:], label='Outliers True')

# Scatter where outliers are false, color blue
ax.scatter('ContextID', 'EscAct_Curr_A', c='b', data=frame.loc[frame.loc[:,'Outlier?']==False,:], label='Outliers Fasle')

# Set Labels On Axes
ax.set_xlabel('ContextID')
ax.set_ylabel('EscAct_Curr_A')

# Toggle Legend On
ax.legend()