【问题标题】:matplotlib scatter: the more overlapping points the bigger the markermatplotlib scatter:重叠点越多,标记越大
【发布时间】:2023-03-17 00:45:02
【问题描述】:

我想散点图两个分类变量如下

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

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

我想看到一个散点图,其中左侧点 (1,2) 的标记比右侧点 (2,1) 上的标记大两倍,以显示不同的出现的点。这样做的正确方法是什么? (除了我手动计算出现次数并将它们放在plt.scattersize 参数中的琐碎解决方案之外)

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

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

为了给我的问题提供更多背景信息,这两个输出是两个分类器的预测,我想探索预测之间的差异以评估是否对它们进行集成。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,Counter 是一个不错的选择:你认为 scatter 是最好的情节吗?或者可能有一些更好的图来突出分类器预测的不同分布?
    • @AlessandroSolbiati:条形图是另一个不错的选择,可以直接显示出现频率
    猜你喜欢
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2017-10-15
    • 2019-07-01
    相关资源
    最近更新 更多