我有一个如下所示的数据框:
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”) ))。
知道如何实现这个目标吗?
答案 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()