Matplotlib: “Onbekende projectie ‘3d'” fout

Ik heb zojuist matplotlib geïnstalleerd en probeer een van hun voorbeeldscripts uit te voeren. Ik kom echter de onderstaande fout tegen. Wat doe ik verkeerd?

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
cset = ax.contour(X, Y, Z, 16, extend3d=True)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()

De fout is

Traceback (most recent call last):
  File "<string>", line 245, in run_nodebug
  File "<module1>", line 5, in <module>
  File "C:\Python26\lib\site-packages\matplotlib\figure.py", line 945, in gca
    return self.add_subplot(111, **kwargs)
  File "C:\Python26\lib\site-packages\matplotlib\figure.py", line 677, in add_subplot
    projection_class = get_projection_class(projection)
  File "C:\Python26\lib\site-packages\matplotlib\projections\__init__.py", line 61, in get_projection_class
    raise ValueError("Unknown projection '%s'" % projection)
ValueError: Unknown projection '3d'

Antwoord 1, autoriteit 100%

Ten eerste denk ik dat mplot3Deen beetje anders werkte in matplotlibversie 0.99dan in de huidige versie van matplotlib.

Welke versie gebruikt u? (Probeer het uit: python -c 'import matplotlib; print matplotlib."__version__")

Ik vermoed dat je versie 0.99gebruikt, in welk geval je een iets andere syntaxis moet gebruiken of moet updaten naar een recentere versie van matplotlib.

Als je versie 0.99gebruikt, probeer dit dan in plaats van het trefwoordargument projectionte gebruiken:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d, Axes3D #<-- Note the capitalization! 
fig = plt.figure()
ax = Axes3D(fig) #<-- Note the difference from your original code...
X, Y, Z = axes3d.get_test_data(0.05)
cset = ax.contour(X, Y, Z, 16, extend3d=True)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()

Dit zou ook moeten werken in matplotlib1.0.x, niet alleen in 0.99.


Antwoord 2, autoriteit 56%

Om toe te voegen aan het antwoord van Joe Kington (niet genoeg reputatie voor een opmerking) is er een goed voorbeeld van het mengen van 2D- en 3D-plots in de documentatie op http://matplotlib.org/examples/mplot3d/mixed_subplots_demo.htmldie laat zien dat projection=’3d’ werkt in combinatie met de Axes3D-import.

from mpl_toolkits.mplot3d import Axes3D
...
ax = fig.add_subplot(2, 1, 1)
...
ax = fig.add_subplot(2, 1, 2, projection='3d')

In feite zolang de Axes3D-import aanwezig is, is de regel

from mpl_toolkits.mplot3d import Axes3D
...
ax = fig.gca(projection='3d')

zoals gebruikt door de OP werkt ook. (gecontroleerd met matplotlib versie 1.3.1)


Antwoord 3, autoriteit 13%

Importeer mplot3d in zijn geheel om “projection = ‘3d'” te gebruiken.

Plaats de onderstaande opdracht bovenaan je script. Het zou goed moeten werken.

van mpl_toolkits importeer mplot3d

Antwoord 4, autoriteit 3%

Ik kom hetzelfde probleem tegen en het antwoord van @Joe Kington en @bvanlew lost mijn probleem op.

maar ik zou meer informatie moeten toevoegen als je pycharm gebruikt en auto importinschakelt.

wanneer u de code opmaakt, wordt de code from mpl_toolkits.mplot3d import Axes3Dautomatisch verwijderd door pycharm.

dus mijn oplossing is

from mpl_toolkits.mplot3d import Axes3D
Axes3D = Axes3D  # pycharm auto import
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

en het werkt goed!


Antwoord 5

Zoals aanbevolen in andere opmerkingen, ontdekte ik dat het importeren van “axes3d” het probleem oploste:

from mpl_toolkits.mplot3d import Axes3D

Het lijkt erop dat dit nodig is als je een oudere versie van matplotlib.pyplot gebruikt


Antwoord 6

Probeer dit:

import matplotlib.pyplot as plt
import seaborn as sns
from mpl_toolkits.mplot3d import axes3d
fig=plt.figure(figsize=(16,12.5))
ax=fig.add_subplot(2,2,1,projection="3d")
a=ax.scatter(Dataframe['bedrooms'],Dataframe['bathrooms'],Dataframe['floors'])
plt.plot(a)

Other episodes