Я попытался построить трехмерный график с тремя наборами данных следующим образом:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
g1 = (transformed[0:numberOfHockey,0],transformed[numberOfHockey:numberOftrees,0],transformed[numberOftrees:,0])
g2 = (transformed[0:numberOfHockey,1],transformed[numberOfHockey:numberOftrees,1],transformed[numberOftrees:,1])
g3 = (transformed[0:numberOfHockey,2],transformed[numberOfHockey:numberOftrees,2],transformed[numberOftrees:,2])
data = (g1, g2, g3)
colors = ("red", "green", "blue")
groups = ("Hockey", "Tree", "movies")
# Create plot
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax = fig.gca(projection='3d')
for data, color, group in zip(data, colors, groups):
x, y, z = data
ax.scatter(x, y, z, alpha=0.8, c=color, edgecolors='none', s=30, label=group)
plt.title('Matplot 3d scatter plot')
plt.legend(loc=2)
plt.show()
Здесь transfomed - это матрица примеров. каждый пример имеет три особенности. Это данные с уменьшенным размером с использованием PCA. Я использовал scikit научиться делать PCA. Однако я получаю следующую ошибку:
ValueError Traceback (most recent call last)
<ipython-input-13-0e3c4126607f> in <module>
93 for data, color, group in zip(data, colors, groups):
94 x, y, z = data
---> 95 ax.scatter(x, y, z, alpha=0.8, c=color, edgecolors='none', s=30, label=group)
96
97 plt.title('Matplot 3d scatter plot')
/opt/conda/lib/python3.6/site-packages/mpl_toolkits/mplot3d/axes3d.py in scatter(self, xs, ys, zs, zdir, s, c, depthshade, *args, **kwargs)
2298
2299 xs, ys, zs = np.broadcast_arrays(
-> 2300 *[np.ravel(np.ma.filled(t, np.nan)) for t in [xs, ys, zs]])
2301 s = np.ma.ravel(s) # This doesn't have to match x, y in size.
2302
/opt/conda/lib/python3.6/site-packages/numpy/lib/stride_tricks.py in broadcast_arrays(*args, **kwargs)
257 args = [np.array(_m, copy=False, subok=subok) for _m in args]
258
--> 259 shape = _broadcast_shape(*args)
260
261 if all(array.shape == shape for array in args):
/opt/conda/lib/python3.6/site-packages/numpy/lib/stride_tricks.py in _broadcast_shape(*args)
191 # use the old-iterator because np.nditer does not handle size 0 arrays
192 # consistently
--> 193 b = np.broadcast(*args[:32])
194 # unfortunately, it cannot handle 32 or more arguments directly
195 for pos in range(32, len(args), 31):
ValueError: shape mismatch: objects cannot be broadcast to a single shape