2017-03-03 56 views
1

我有一个数据帧,看起来像这样:Hexbin情节与色彩计算

df = pd.DataFrame(
    {"x" : [2,4,5,8,5,4,1,6,8,7], 
    "y" : [2,4,1,3,7,8,9,3,6,9], 
    "z" : ["A","B","B","A","B","A","A","B","B","A"]}) 

"x""y"包含x和y坐标,而列"z"包含相关的标签。现在我想使用'jet'色彩映射创建plt.hexbin图。箱的值以及颜色的值不应由点的密度给出,而应反映箱中标记为“B”的点的分数((计数“B”)/(计数“B”+计数“A” ))。

任何想法,我可以如何实现这一目标?

+0

呃,这是'R'或'Python'? –

+0

对不起我的坏。刚刚纠正! – MattnDo

+0

哇谢谢!清晨的帖子...... – MattnDo

回答

2

如果我明白你想要什么,你可以使用C参数来表示每个点的值。这些值将由reduce_C_function给出的函数减少,默认为np.mean。 (这也记录在api中。)当您为每个“B”分配1,并为每个“A”分配0时,您希望每个分箱的值恰好是所有值的平均值。所以这会给你想要的结果:

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.DataFrame({"x": [2,4,5,8,5,4,1,6,8,7], 
        "y" : [2,4,1,3,7,8,9,3,6,9], 
        "z" : ["A","B","B","A","B","A","A","B","B","A"]}) 

plt.hexbin(df["x"], df["y"], C=df["z"]=="B", gridsize=4, cmap=plt.get_cmap("jet")) 
plt.scatter(df["x"], df["y"], c=df["z"]=="B", cmap=plt.get_cmap("viridis")) 
plt.show() 

这里的散点图只是为了验证分箱是否正确。 “B”的着色为黄色,“A”的着色为紫色。 结果是这样的: enter image description here

减小gridsize=2表明,该工程还为每个仓的一个以上的点: enter image description here

+0

非常感谢@jotasi,这真是太棒了!对不起,如果你不得不猜测回答我的问题。 – MattnDo