使用matplotlib的百分比直方图,轴的一个输入是两列的组合

时间:2017-04-17 06:40:06

标签: python matplotlib dataframe

我有一个数据框,其中包含我想要预测的类值。我对标签1感兴趣。
 我试图确定转弯是否对给定的键值起作用。 对于给定的键值为1且转弯数为1,有多少百分比的等级值为1?

例如,对于给定的数据

key = 1,turn = 1,8 / 11有一个类标签1
key = 1,turn = 2,5 / 6有一个类标签1

如何为此类数据绘制百分比直方图? 我知道使用matplotlib的正常直方图

import matplotlib
matplotlib.use('PS')
import matplotlib.pyplot as plt
plt.hist()

但我会使用什么值来获得百分比直方图?

数据框中的示例列

键= [ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ]

转= [ 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 1 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4]

类= [0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0 1 1 0 0 1 0 1 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 1 1 1 0 0]

1 个答案:

答案 0 :(得分:1)

由于链接问题的概念显然不是您所需要的,因此另一种方法是生成饼图,如下所示。

enter image description here

key=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ]
turn=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
clas=[0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0]

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

df=pd.DataFrame({"key":key, "turn":turn, "class":clas})
piv = pd.pivot_table(df, values="class", index="key", columns="turn")
print piv
fig, axes = plt.subplots(ncols=4, nrows=2)
for i in range(2):
    axes[i,0].set_ylabel("key {}".format(i+1))
    for j in range(4):
        pie = axes[i,j].pie([piv.values[i,j],1.-piv.values[i,j]], autopct="%.1f%%")
        axes[i,j].set_aspect("equal")
        axes[0,j].set_title("turn {}".format(j+1))

plt.legend(pie[0],["class 1","class 0"], bbox_to_anchor=(1,0.5), loc="right", 
                          bbox_transform=plt.gcf().transFigure)       
plt.show()