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

Python matplotlib散布:重叠点越多,标记越大,python,matplotlib,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个重叠点),而无法理解两个重叠点的不同出现 我希望看到散点图,其中左侧点(1,2)的标记比右侧点(2,1)的标记大两倍,以显示点的不同出现。正确的方法是什么?(在繁琐的解决方案旁边,我用手计算出现的次数,并将

我想把两个分类变量散绘如下

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个重叠点),而无法理解两个重叠点的不同出现

我希望看到散点图,其中左侧点(1,2)的标记比右侧点(2,1)的标记大两倍,以显示点的不同出现。正确的方法是什么?(在繁琐的解决方案旁边,我用手计算出现的次数,并将它们放在
plt.scatter
size
参数中)

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

指针可能是使用中建议的某种内核密度估计


为了给我的问题提供更多的上下文,这两个输出是两个分类器的预测,我想探索预测之间的差异,以评估是否将它们集成。

您可以利用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()

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

freqs = Counter(a)

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

是的,计数器是一个很好的选择:您认为散布是最好的绘图吗?或者可能有更好的图来突出分类器预测的不同分布?@AlessandroSolbiati:条形图是另一个很好的选择,它将直接显示发生的频率