#python-3.x #matplotlib
Вопрос:
Я хочу разделить и раскрасить точки, val_lab(611,3) по их меткам,pred_LAB(611,)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = plt.axes(projection = '3d')
ax.set_xlabel('L')
ax.set_ylabel('A')
ax.set_zlabel('B')
for i in range(0, len(val_lab)):
ax.scatter3D(
val_lab[i,0],
val_lab[i,1],
val_lab[i,2],
s = 8,
marker='o',
c = pred_LAB
#cmap = 'rainbow'
)
#ax.legend(*points.legend_elements(), title = 'clusters')
plt.show()
Проблема в том, что он показывает ошибку,
аргумент c’ содержит 611 элементов, что неприемлемо для использования с » x » размером 1, «y» размером 1.
Однако, если в наборе данных всего десять точек,он может правильно отображать фигуру, я не знаю, как решить эту проблему, кроме того, как добавить легенду этой фигуры?
Ответ №1:
В вашем решении вы хотели бы заменить c = pred_LAB
на c = pred_LAB[i]
. Но вам не нужно использовать цикл for для построения данных. Вы можете просто использовать следующее:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# generate random input data
val_lab = np.random.randint(0,10,(611,3))
pred_LAB = np.random.uniform(0,1, (611,))
# plot data
fig = plt.figure()
ax = plt.axes(projection = '3d')
ax.set_xlabel('L')
ax.set_ylabel('A')
ax.set_zlabel('B')
# create one 3D scatter plot - no for loop
ax.scatter3D(
val_lab[:,0],
val_lab[:,1],
val_lab[:,2],
s = 8,
marker='o',
c = pred_LAB,
cmap = 'rainbow',
label='my points'
)
# add legend
plt.legend()
plt.show()
Комментарии:
1. Спасибо за ваш ответ. Я однажды попробовал этот метод без цикла for, однако я не знаю,почему он показывает ошибку, ошибку ValueError: Недопустимый аргумент RGBA: masked_array(данные=[0.275191, 0.194905, 0.496005, 0.6390076836408018], маска=Ложь, значение fill_value=’?’, dtype=объект)
2. Ошибка, на которую вы ссылаетесь, — это новая ошибка, которая только что появилась?
3. да,я использую тот же код, но возникает эта ошибка
4. У вашей ошибки могут быть разные причины. Может быть, форма цветов может быть неправильной. Другим может быть то, что вы не используете допустимые значения RGBA.
5. Итак, есть ли какой-то способ сохранить функцию for-loop…если я покажу точку по очереди, это может сработать..