Маркировка нанесенной даты с помощью matplotlib и Axes3D - PullRequest
2 голосов
/ 20 апреля 2019

Как мне добавить наименование к моему графику Axes3D, как на картинке вверху? Мое изображение ниже:

Axes3D

Вот мой код:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X_train['width'], X_train['height'], X_train['color_score'], c=y_train, marker='o', s=100)
ax.set_xlabel('width')
ax.set_ylabel('height')
ax.set_zlabel('color_score')
plt.show()

Что мне нужно добавить, чтобы мой нижний график имел имена в верхней строке? Matplotlib немного запутывает новичка, поэтому показ какой строки кода в каком формате будет очень полезным.

1 Ответ

1 голос
/ 20 апреля 2019

Я думаю ax.text() делает то, что вы хотите.См. здесь для нескольких примеров.

Чтобы правильно вывести хорошее (простое для чтения) размещение текста, учитывая данные, может быть непросто.Наивный подход может выглядеть следующим образом (не тестировать код):

offset = [0, 0, 0.05]
for label in y_train.unique():          
    idx = (y_train==label)
    posX = X['width'][idx].mean() + offset[0]
    posY = X['height'][idx].mean() + offset[1]
    posZ = X['color_score'][idx].mean() + offset[2]
    ax.text(x=posX, y=posY, z=posZ, s=label, zdir=None)

Если вы используете панд, код может выглядеть примерно так:

X['labels'] = y_train
grouping = X.groupby('labels')
for label, group in grouping:
    center = group[['width', 'height', 'color_score']].mean(axis=0).values
    center += np.asarray(offset)
    ax.text(x=center[0], y=center[1], z=center[2], s=label, zdir=None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...