使用具有NaN的组,分散根据颜色绘制不同的组

时间:2016-02-12 16:52:31

标签: python matplotlib

我在pandas中有一个数据框:

               d1_a    d2_a               d3_a    group

BI59           NaN     0.023333           NaN     2
BI71           NaN     0.173333           NaN     2
BI52           NaN          NaN           NaN     1
BI44      0.450000          NaN           NaN     1
BI36           NaN     0.286667           NaN     2
BI29           NaN     0.030000           NaN     2
BI50           NaN     0.633333           NaN     2
BI63           NaN     0.110000           NaN     2
BI64           NaN     0.320000           NaN     2
BI65      0.206667          NaN           NaN     1
BI67           NaN     0.216667           NaN     2
BI68           NaN     0.473333           NaN     2
BI71           NaN     0.053333           NaN     2
BI72           NaN     0.006667           NaN     2
BI75           NaN     0.430000           NaN     2
BI76           NaN     0.260000           NaN     2
BI78           NaN     0.250000           NaN     2
BI81           NaN     0.006667           NaN     2
BI83           NaN     0.603333           NaN     2
BI84           NaN          NaN      0.196667     3
BI86           NaN          NaN      0.046667     3
BI89           NaN     0.110000           NaN     2
BI91           NaN          NaN      0.213333     3
BI93           NaN     0.443333           NaN     2
BI97      0.586667          NaN           NaN     1
BI98      0.380000          NaN           NaN     1
BI99      0.016667          NaN           NaN     1
BI11           NaN     0.206667           NaN     2
BI12           NaN     0.500000           NaN     2
BI17      0.626667          NaN           NaN     1

BI##是索引列,行所属的组由组列表示。因此d1_a是组1,d2_a是组2而d3_a是组3.此外,索引列上的数字将是x轴。如何创建散点图,每个组用不同的颜色表示?当我尝试绘图时,我会得到空图。

如果我尝试subset_d1_a = df['d1_a'].dropna()之类的东西并为每个组做类似的事情,那么我可以删除NaN但现在数组的长度不同,我无法在同一个图上绘制它们。

最好我想在seaborn中这样做,但python中的任何方法都可以。

到目前为止,这就是我正在做的事情,现在确定我是否正走在正确的道路上:

subset = pd.concat([df.d1_a, df.d2_a, df.d3_a], axis=1)
subset = subset.sum(axis=1)
subset = pd.concat([subset,df.group], axis=1)
subset = subset.dropna()
g = subset.groupby('groups')

1 个答案:

答案 0 :(得分:0)

目前尚不清楚散点图在给定数据时会是什么样子,但您可以这样做:

colors = {1: 'red', 2: 'green', 3: 'blue'}
df.iloc[:, :3].sum(axis=1).plot(kind='bar', colors=df.group.map(colors).tolist()

enter image description here