Добавление ярлыков на трехмерную диаграмму рассеяния не работает - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу добавить текстовые метки на трехмерную диаграмму рассеяния в matplotlib, но она либо вообще не работает, либо сворачивает оси в беспорядок.Я перепробовал все обходные пути, которые смог найти, но, похоже, они не справляются с работой.Вот что я сделал до сих пор.

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import pandas as pd

data = pd.DataFrame({'x_value': [0.58245011499999999,0.58875,0.58571373199999999,0.57505909399999999], 'y_value': [0.575939804, 0.53125, 0.574922673, 0.56629390800000001], 'z_value': [0.37844187799999995,0.14374999999999999, 0.38144978899999998, 0.4012994879999999], 'text_name':['text_1', 'text_2', 'text_3', 'text_4']})


fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

ax.scatter(data['x_value'], data['y_value'], data['z_value'], c = data.index,  cmap = cm.summer, s=60)

points = []

for i in range(len(data)):
    points.append((data['x_value'][i], data['y_value'][i], 
    data['z_value'][i], data['text_name'][i]))

ax.set_xlabel('X_VALUES')
ax.set_ylabel('Y_VALUES')
ax.set_zlabel('Z_VALUES')

ax.view_init(34, 200)

plt.title('MY PLOT')

for i in range(len(points)):
    ax.text3D(points[i][0], points[i][1], points[i][2], points[i][3], zdir= 
    (1, 1, 1))

plt.show()

Результат этого упражнения, однако, нулевой - метки точек не видны:

Plot with no labels

Однако, когда я добавляю следующие строки выше plt.show(), я получаю метки, но все перепутано и последующее сообщение об ошибке:

for spine in ax.spines.values():
    spine.set_visible(False) 
### This loop included to forestall known problem with plt.tight_layout() collapsing axes that nevertheless happens anyway.

plt.tight_layout()

Plot bad labels

Нижний и верхний поля нельзя сделать достаточно большими, чтобы вместить все украшения топоров

Кто-нибудь может посоветовать, что я делаю неправильно?Спасибо!

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