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 mplot3D
een beetje anders werkte in matplotlib
versie 0.99
dan 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.99
gebruikt, in welk geval je een iets andere syntaxis moet gebruiken of moet updaten naar een recentere versie van matplotlib
.
Als je versie 0.99
gebruikt, probeer dit dan in plaats van het trefwoordargument projection
te 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 matplotlib
1.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 import
inschakelt.
wanneer u de code opmaakt, wordt de code from mpl_toolkits.mplot3d import Axes3D
automatisch 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)