Что быстрее, чем matplotlib для большого количества очков? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть куча графиков с большим количеством точек в них. Когда я пытаюсь сделать это с помощью matplotlib, это занимает несколько часов, что не удобно. Какие существуют альтернативные подходы?

Соответствующий бит моего кода выглядит следующим образом, где количество точек для каждой функции может легко составить 100 000:

marker   = 'o'
s        = 10
patches = []
import matplotlib.patches as mpatches
for feature, color in zip(features, colors):
    for point, value in zip(tsne, df[feature].values):
        try:
            plt.scatter(point[0], point[1], alpha=value, facecolor=color, marker=marker, s=s, label=feature)
        except:
            pass
    patches.append(mpatches.Rectangle((0, 0), 1, 1, fc=color))
plt.legend(patches, features, prop={'size': 15}, loc='center left', bbox_to_anchor=(1, 0.5))
plt.show();

1 Ответ

0 голосов
/ 24 октября 2019

Запуск вашего внутреннего цикла:

for point, value in zip(tsne, df[feature].values):
    try:
        plt.scatter(point[0], point[1], alpha=value, facecolor=color, marker=marker, s=s, label=feature)

вместо этого с 1d numpy массивами определенно ускорит процесс.

Внутренний цикл можно заменить на что-то вроде:

x = tsne[:, 0] # is `tsne` an (n, 2) numpy array?
y = tsne[:, 1]
alpha_values = df[feature].values
try:
    plt.scatter(x, y, alpha=alpha_values, facecolor=color, marker=marker, s=s, label=feature)
except:
    pass

Если все еще слишком медленно для вас, вы также можете переключиться на штриховку данных в Holoviews , но сначала попробуйте удалить внутренний цикл for, поскольку это определенно сильно замедляет работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...