带有计算颜色的Hexbin图

时间:2017-03-03 07:32:32

标签: python matplotlib

我有一个如下所示的数据框:

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' colourmap创建plt.hexbin图。箱的值以及颜色的值不应该由点的密度给出,而应该反映箱中标记为“B”的点的分数((计数“B”)/(计数“B”+计数“A”) ))。

知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:3)

如果我理解你想要什么,你可以使用代表每个点值的C参数。这些值将由reduce_C_function给出的函数减少,默认为np.mean。 (这也记录在api中。)当你为每个" B"分配1时,你想要的每个bin的值正好是所有值的平均值。 0到每个" A"。所以这会给你想要的结果:

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"和#34; A"。 结果如下: enter image description here

减少gridsize=2表明每个bin的效果也超过一个点: enter image description here