ValueError: c аргумент имеет n элементов, что недопустимо для использования с x размером 0, y с размером 0 - PullRequest
2 голосов
/ 07 апреля 2020

Я пытаюсь построить диаграмму рассеяния, используя matplotlib / seaborn:

plt.figure(figsize=(16,10))
sns.scatterplot(
    x=[i[0] for i in tsne_data],
    y=[i[1] for i in tsne_data],
    alpha=0.3,
    color=label_colors
)

Я получаю сообщение об ошибке:

ValueError: 'c' argument has 267794 elements, which is not acceptable for use with 'x' with size 0, 'y' with size 0.

Мои данные:

  • label_colors - список Python с 267 794 элементами. Каждый элемент представляет собой строку, например, «красный», «синий», «фиолетовый».
  • tsne_data - двумерный массив Numpy с 267 794 элементами. Каждый элемент имеет координату оси, у, например [ 9.417695 , -25.48891 ]. В форме (267794, 2).

Я не могу понять, почему я получаю эту ошибку, особенно почему «x» и «y» не распознаются как имеющие какую-либо длину. Я попытался сделать это с pandas фреймом данных, где у меня есть столбцы 'x' и 'y', затем я установил x=df['x'] или x=list(df['x']), но я получаю ту же ошибку. Как я могу построить мой tsne_data так, чтобы каждая из его 267 794 точек была окрашена цветом, указанным в соответствующем индексе в label_colors?

1 Ответ

1 голос
/ 07 апреля 2020

Согласно документации seaborn вы должны использовать параметр hue, например:

plt.figure(figsize=(16,10))
sns.scatterplot(
    x=[i[0] for i in tsne_data],
    y=[i[1] for i in tsne_data],
    alpha=0.3,
    hue=label_colors
)
...