TypeError:scatter()为参数'c'获得了多个值

时间:2019-04-26 10:50:25

标签: numpy matplotlib scipy scatter-plot hierarchical-clustering

我正在尝试在我的MFCC数组'signal_mfcc'上进行层次结构聚类,这是一个尺寸为(198,12)的ndarray。 198个音频帧/观测和12个系数/维度?

我将随机阈值“ 250”和“距离”用于标准,如下所示:

    thresh = 250
    print(signal_mfcc.shape)
    clusters = hcluster.fclusterdata(signal_mfcc, thresh,    criterion="distance")

在指定阈值的情况下,输出变量'cluster'是长度为198或(198,)的序列[1 1 1 ... 1],我假设将所有数据都指向一个群集。 然后,我使用pyplot通过以下代码绘制scatter():

    # plotting
    print(*(signal_mfcc.T).shape)
    plt.scatter(*np.transpose(signal_mfcc), c=clusters)
    plt.axis("equal")
    title = "threshold: %f, number of clusters: %d" % (thresh) len(set(clusters)))
    plt.title(title)
    plt.show()

输出为:

    plt.scatter(*np.transpose(signal_mfcc), c=clusters)
    TypeError: scatter() got multiple values for argument 'c'

散点图将不会显示。关于可能出了什么问题的任何线索? 预先感谢!

1 个答案:

答案 0 :(得分:0)

从此SO Thread中,您可以看到为什么出现此错误。

Scatter documentationc设为第二个可选参数,并将第4个参数合计。此错误意味着您在np.transpose(signal_mfcc)上拆箱将返回4件以上的物品。而且,正如您稍后定义c一样,它定义了两次,并且无法选择哪个是正确的。

示例:

def temp(n, c=0):
    pass
temp(*[1, 2], c=1)
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: temp() got multiple values for argument 'c'