0

I have a question I have a dataset which contain 1200060 rows and 3 column. column contain points and I have to draw a 3D plot for it. I'm using the code below but I don't know where is the error.

fig = plt.figure()
ax = plt.axes(projection="3d")
count = len(data1.index)
z_line = np.linspace(0, count, 1000)
x_line = np.cos(z_line)
y_line = np.sin(z_line)
ax.plot3D(x_line, y_line, z_line, 'gray')

z_points = count * data1[['z']]
x_points = np.cos(z_points) + 0.1 * data1[['x']]
y_points = np.sin(z_points) + 0.1 * data1[['y']]
ax.scatter3D(x_points, y_points, z_points, c=z_points, cmap='hsv')

plt.show()

error is:

ValueError: shape mismatch: objects cannot be broadcast to a single shape

I tried this one too but unsuccessful

fig = plt.figure()
ax = plt.axes(projection="3d")


x = np.linspace(len(data1['z'].index), len(data1['y'].index), len(data1['x'].index))
y = np.linspace(len(data1['z'].index), len(data1['y'].index), len(data1['x'].index))

X = data1[['x']]
Y = data1[['y']]
Z = data1[['z']]

fig = plt.figure()
ax = plt.axes(projection="3d")
ax.plot_wireframe(X, Y, Z, color='green')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')

plt.show()

this one run but didn't show any output

and using this one same error as the first one

fig = plt.figure()
ax = plt.axes(projection="3d")

num_bars = len(data1.index)
x_pos = data1[['x']], num_bars
y_pos = data1[['y']], num_bars
z_pos = data1[['z']], num_bars
x_size = np.ones(num_bars)
y_size = np.ones(num_bars)
z_size = np.ones(num_bars)

ax.bar3d(x_pos, y_pos, z_pos, x_size, y_size, z_size, color='aqua')
plt.show()

error: ValueError: shape mismatch: objects cannot be broadcast to a single shape

1 Answer 1

1

Either use data1['z'] instead of data1[['z']], or you could even use data1[['z']].values.

Why? Because you want to work with either Series or numpy arrays here, not with DataFrames.

See the difference between:

print(type(data1))
# <class 'pandas.core.frame.DataFrame'>

print(type(data1['x']))
#<class 'pandas.core.series.Series'>

print(type(data1['x'].values))
#<class 'numpy.ndarray'>

print(type(data1[['x']]))
#<class 'pandas.core.frame.DataFrame'>

print(type(data1[['x']].values))
#<class 'numpy.ndarray'>

To be more precise, the underlying issue is that pandas does not know how it is supposed to handle the addition of two differently named columns, as can be seen here:

a = pd.DataFrame({'x':np.arange(0,5)})
b = pd.DataFrame({'y':np.arange(0,5)})
c = pd.DataFrame({'x':np.arange(0,5)})
print(a+b)
### yields:
#        x   y
#    0 NaN NaN
#    1 NaN NaN
#    2 NaN NaN
#    3 NaN NaN
#    4 NaN NaN
print(a+c)
### yields:
#       x
#    0  0
#    1  2
#    2  4
#    3  6
#    4  8
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.