java画熊猫_从熊猫交叉表制作气泡图

我有一个4列和几千行的pandas数据帧 . 所有条目都是True或False . 让我们调用数据帧'df'和列'c0','c1','c2'和'c3' . 我感兴趣的是有多少行有2 ^ 4 = 16个可能的真值,所以我自己做了一个交叉表:

xt = pd.crosstab([df.c0,df.c1],[df.c2,df.c3])

print(xt)

这显示了一个漂亮的4x4单元格表,每个单元格包含具有真值组合的行数 . 更好的是,这16个细胞的空间布局对我来说是有意义和有用的 . 好的,一切都很好 . 但是我如何绘制呢?

具体来说,我想制作一个交叉表计数的气泡图,即交叉表数据的图形表示,与表中显示的相同的空间排列,但现在用彩色blob替换每个数字(例如,一个圆圈) )与计数成比例的面积 . 因此,这是一个散点图,其中四个(c0,c1)真值沿着一个轴,四个(c2,c3)真值沿着另一个轴,以及4x4规则网格的各种大小的圆 .

我知道我可以通过将大小数据传递给matplotlib的散射函数的's'关键字来制作气泡图,但是我无法想出一种简单的方法来告诉pandas制作一个散列图,它使用列 Headers 作为x坐标,行 Headers 为y坐标,数据值为散点图的气泡大小 . 通过将我的数据帧转换为numpy数组并绘制该数据,我获得了一些运气,但随后我从交叉表中丢失了轴标签的结构 . (是的,我可以手动重建刻度标签,但我希望能够在算法上为其他类似的数据集重现此任务 . )

编辑:灵感来自下面的@piRSquared的回答,这里有一些我要求的澄清 . 此代码接近我想要的,但结果图上的轴已丢失有关交叉表对象的分层MultiIndex标签结构的任何信息 .

import pandas as pd

import numpy as np

randomData=np.random.choice([True,False],size=(100, 4),p=[.6,.4])

df = pd.DataFrame(randomData, columns=['c0','c1','c2','c3'])

xt=pd.crosstab([df.c0,df.c1], [df.c2,df.c3])

x=np.array([range(4)]*4)

y=x.transpose()[::-1,:]

pl.scatter(x,y,s=np.array(xt)*10)

(链接到绘图图像,因为我没有足够的声誉来嵌入:a scatter plot with poorly labelled axes . )理想情况下,轴标签将具有从交叉表对象的基础MultiIndex派生的视觉上水平的结构,类似于:

c2 False True

c3 False True False True

c0 c1

False False 0 8 4 9

True 3 2 4 10

True False 7 5 3 10

True 2 7 8 18

或者,或许,让人想起传说和x轴在这里表达的内容:

xt.plot(kind='bar',stacked=True)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值