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

2024-09-21 04:46:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,其中有一个我要预测的类值。我对标签1感兴趣。
我试图确定turn是否对给定的键值起作用。 对于给定的键值,比如1,圈数为1,类值为1的圈数百分比是多少?在

例如给定数据

key=1,turn=1,8/11有一个class label 1
key=1,turn=2,5/6有一个class label 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 三 三 三 三 三 三 三 三 三 三 三 三 三 三 4 4 4 4 4 4 1 2 2 2 2 2 2 三 三 三 三 三 三 三 三 三 三 三 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]


Tags: 数据keyimportmatplotlibplt标签直方图label
1条回答
网友
1楼 · 发布于 2024-09-21 04:46:58

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

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()

相关问题 更多 >

    热门问题