我想散点图两个分类变量,如下所示
from matplotlib import pyplot as plt
a=[1,1,1,1,2,2]
b=[2,2,2,2,1,1]
plt.scatter(a,b)
Run Code Online (Sandbox Code Playgroud)
如果我绘制此图,我将只看到两个点(4 个重叠在 (1,2) 中,2 个重叠在 (2,1) 中),而无法理解两个重叠点的不同出现情况。
我想看到一个散点图,其中左侧点(1,2)的标记比右侧点(2,1)的标记大两倍,以显示该点的不同出现情况。这样做的正确方法是什么?(除了我手动计算出现次数并将它们放入 的参数中的简单size解决方案之外plt.scatter)
我已经搜索了其他 SOF 问题,但他们都建议使用像这里这样的alpha ,但我希望看到标记大小以更好地理解出现之间的不同比例。
一个指针可能是使用此答案中建议的一些内核密度估计
为了给我的问题提供更多背景信息,两个输出是两个分类器的预测,我想探索预测之间的差异以评估是否将它们集成。
您可以利用可以使用模块获得的 x 点(甚至该特定数据集的 y 点)的出现频率Counter。然后,频率可以用作定义标记大小的重新缩放因子。这里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()
Run Code Online (Sandbox Code Playgroud)
可视化分布的另一种选择是条形图
freqs = Counter(a)
plt.bar(freqs.keys(), freqs.values(), width=0.5)
plt.xticks(list(freqs.keys()))
Run Code Online (Sandbox Code Playgroud)