matplotlib散点图:重叠点越多,标记越大

时间:2019-03-12 22:10:13

标签: python matplotlib

我想散布如下两个类别变量

from matplotlib import pyplot as plt    
a=[1,1,1,1,2,2]
b=[2,2,2,2,1,1]
plt.scatter(a,b)

如果我对此进行绘制,我将只能看到两个点(在(1,2)中有4个重叠,在(2,1)中有2个重叠),而无法理解两个重叠点的不同出现。

enter image description here

我想查看一个散点图,其中左边的点(1,2)的标记比右边的点(2,1)的标记大两倍,以显示不同的情况的重点。正确的方法是什么? (在一般的解决方案中,我手动计算发生次数,然后将其放入size的{​​{1}}自变量中)

我已经搜索了其他SOF问题,但是它们都建议使用alpha like here,但是我希望看到一个标记大小,以更好地了解事件之间的不同比例。

指针可能是根据this answer

中的建议使用一些内核密度估计值

为了给我的问题提供更多的背景信息,两个输出是两个分类器的预测,我想探索这些预测之间的差异,以评估是否将它们组合在一起。

1 个答案:

答案 0 :(得分:2)

您可以利用可以使用Counter模块获得的x点(甚至是此特定数据集的y点)的出现频率。然后可以将这些频率用作用于定义标记大小的缩放因子。这里200只是一个很大的数字,用来强调标记的大小。

from matplotlib import pyplot as plt    
from collections import Counter

a=[1,1,1,1,2,2]
b=[2,2,2,2,1,1]

weights = [200*i for i in Counter(a).values() for j in range(i)]
plt.scatter(a, b, s = weights)
plt.show()

enter image description here

另一种可视化分布的选项是条形图

freqs = Counter(a)

plt.bar(freqs.keys(), freqs.values(), width=0.5)
plt.xticks(list(freqs.keys()))

enter image description here

相关问题