AttributeError: 'Line3D' objeto no tiene atributo '_verts3d '

He estado tratando de dibujar una línea de regresión para una regresión multivariable, ambos ENGINESIZE y FUELCONSUMPTION_CITY son variables independientes y CO2EMISSIONes la variable dependiente.

Estaba tratando de dibujar una línea de regresión pero no importa qué, no soy capaz de dibujar como sigue mostrándome el mismo error.

A continuación mi código:-

z_cord = regr.coef_[0][0]*train_engine[['ENGINESIZE']]
z_cod =  regr.coef_[0][1]*train_engine[['FUELCONSUMPTION_CITY']]
s = y_cord.add(y_cod, fill_value=0)

l = []
for index, row in s.iterrows():
    l.append(row['ENGINESIZE']+row['FUELCONSUMPTION_CITY'] + regr.intercept_)
    
z =  pd.DataFrame(l,columns=['CO2EMISSION'])

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.scatter(data[['ENGINESIZE']],data[['FUELCONSUMPTION_CITY']],co2_data)

x = train_engine[['ENGINESIZE']]
y = train_engine[['FUELCONSUMPTION_CITY']]

ax.plot3D(x,y,z,color='red')

plt.show()

Cada vez que lo ejecuto me da estos errores

ValueError: input operand has more dimensions than allowed by the axis remapping

AttributeError: 'Line3D' object has no attribute '_verts3d'

la trama de dispersión se dibuja cuando yo comentario ax.plot3D(x,y,z,color='red') línea.

No sé adónde voy mal, algo de ayuda sería apreciado.

Pregunta hecha hace 3 años, 4 meses, 27 días - Por syntaxsniper


3 Respuestas:

  • En su código, x y y son bidimensionales. Sin embargo, ax.plot3D Requisitos x y y para ser una dimensión y usted puede hacer que una dimensión por:

    x = train_engine['ENGINESIZE']
    y = train_engine['FUELCONSUMPTION_CITY']
    

    Tenga en cuenta que podemos conseguir el número de dimensiones x y y por ndim:

    x.ndim, y.ndim
    

    Respondida el Dec 18, 2020 a las 21:00 - por logicloom

    Votos positivos: 0 | Votos negativos: 0

  • El error ValueError: input operand has more dimensions than allowed by the axis remapping probablemente está relacionado con la forma en que estás pasando los datos a la función plot3D.

    Por otro lado, el error AttributeError: 'Line3D' object has no attribute '_verts3d' parece estar relacionado con el método plot3D, el cual no recibe correctamente los datos de las variables train_engine[['ENGINESIZE']], train_engine[['FUELCONSUMPTION_CITY']] y pd.DataFrame(l,columns=['CO2EMISSION']).

    Parece que estás intentando graficar una línea en un espacio 3D utilizando datos que no tienen la misma dimensión. Asegúrate de que x, y, y z tengan la misma cantidad de puntos para poder graficar la línea correctamente en 3D.

    Una solución sería asegurarte de que x, y, y z tengan la misma forma y dimensiones antes de pasarlos a la función plot3D.

    Además, ten en cuenta que al pasar x y y a la función plot3D, es posible que necesites convertirlos de DataFrames a arrays de numpy con el método values.

    A continuación te muestro un ejemplo de cómo podrías corregir tu código:

    python
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    ax.scatter(data['ENGINESIZE'], data['FUELCONSUMPTION_CITY'], co2_data)
    
    x = train_engine['ENGINESIZE'].values
    y = train_engine['FUELCONSUMPTION_CITY'].values
    z = np.array(l).flatten()
    
    ax.plot3D(x, y, z, color='red')
    
    plt.show()
    

    Con estas modificaciones, deberías poder graficar la línea de regresión en 3D correctamente. ¡Espero que esto te sea de ayuda!

    Respondida el Dec 19, 2020 a las 21:00 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error AttributeError: 'Line3D' object has no attribute '_verts3d' indica que estás intentando acceder a un atributo que no existe para un objeto Line3D. Esto generalmente ocurre cuando intentas interactuar con un objeto de trama que aún no se ha creado.

    Para solucionar este problema, asegúrate de que la línea ax.plot3D(x,y,z,color='red') se ejecute después de que se haya creado el objeto Line3D.

    Además, el error ValueError: input operand has more dimensions than allowed by the axis remapping sugiere que estás intentando trazar datos con más dimensiones de las que permite el tipo de trama. En este caso, estás intentando trazar datos tridimensionales en una trama 2D.

    Para solucionar este problema, puedes utilizar la proyección 3D de Matplotlib especificando projection='3d' al crear la figura. Esto permitirá trazar datos tridimensionales correctamente.

    Aquí tienes el código corregido:

    
    import matplotlib.pyplot as plt
    import pandas as pd
    from sklearn.linear_model import LinearRegression
    
    

    Cargar datos

    data = pd.read_csv('auto-mpg.csv') train_engine = data[['ENGINESIZE', 'FUELCONSUMPTION_CITY', 'CO2EMISSION']]

    Ajustar modelo de regresión

    regr = LinearRegression() regr.fit(train_engine[['ENGINESIZE', 'FUELCONSUMPTION_CITY']], train_engine['CO2EMISSION'])

    Calcular coordenadas z para la línea de regresión

    z_cord = regr.coef_[0][0]train_engine[['ENGINESIZE']] z_cod = regr.coef_[0][1]train_engine[['FUELCONSUMPTION_CITY']] s = z_cord.add(z_cod, fill_value=0) l = [] for index, row in s.iterrows(): l.append(row['ENGINESIZE']+row['FUELCONSUMPTION_CITY'] + regr.intercept_) z = pd.DataFrame(l,columns=['CO2EMISSION'])

    Crear figura y ejes 3D

    fig = plt.figure() ax = fig.gca(projection='3d')

    Dibujar trama de dispersión

    ax.scatter(data[['ENGINESIZE']],data[['FUELCONSUMPTION_CITY']],co2_data)

    Dibujar línea de regresión

    x = train_engine[['ENGINESIZE']] y = train_engine[['FUELCONSUMPTION_CITY']] ax.plot3D(x,y,z,color='red') plt.show()

    Respondida el Dec 19, 2020 a las 21:12 - por Gemini

    Votos positivos: 0 | Votos negativos: 0