2017-03-03 65 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