用条件绘制布尔数据帧

时间:2016-03-08 14:56:41

标签: python pandas matplotlib

我有两个数据框,如下所示:

test1 = pd.DataFrame({'A':[False, False, False, True], 'B':[False, False, True, False], 'C':[True, False, True, False]})

产生:

      A       B      C
0   False   False   True
1   False   False   False
2   False   True    True
3   True    False   False

test2 = pd.DataFrame({'A':[False, False, False, False], 'B':[True, False, True, False], 'C':[False, False, False, False]})

产生:

      A      B        C
0   False   True    False
1   False   False   False
2   False   True    False
3   False   False   False

我想在一个图中绘制这些数据框,使得y轴是列名,x轴是索引。我希望在相应值True的任何地方都有一个黄色点。如果两个数据框中的相应值均为True,那么我希望有一个红色点。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我制作图表:x轴表示列索引(ABC),y轴表示行索引。那是你想要做的吗?

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

test1 = pd.DataFrame({'A':[False, False, False, True], 'B':[False, False, True, False], 'C':[True, False, True, False]})
test2 = pd.DataFrame({'A':[False, False, False, False], 'B':[True, False, True, False], 'C':[False, False, False, False]})


# Make a matrix whose elements are 0 if both are True, 1 if neither True, else 2.
mat = np.vectorize( lambda a,b: 0 if a and b else 1 if a or b else 2)(test1,test2) 

y,x = np.where(mat==0)
plt.plot(x, y, 'ro')
y,x = np.where(mat==1)
plt.plot(x, y, 'yo')

xlabels = test1.columns

plt.ylim(-1,len(test1.index))
plt.xlim(-1,len(xlabels))

plt.xticks(range(len(xlabels)), xlabels)

plt.show()