Właśnie zainstalowałem matplotlib i próbuję uruchomić jeden z przykładowych skryptów. Jednak napotkam błąd opisany poniżej. Co ja robię źle?
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()
Błąd jest
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'
python
matplotlib
prostokąt
źródło
źródło
Odpowiedzi:
Po pierwsze, myślę, że
mplot3D
działało trochę inaczej wmatplotlib
wersji0.99
niż w obecnej wersjimatplotlib
.Której wersji używasz? (Spróbuj biegać:
python -c 'import matplotlib; print matplotlib."__version__")
Zgaduję, że używasz wersji
0.99
, w takim przypadku musisz użyć nieco innej składni lub zaktualizować do nowszej wersjimatplotlib
.Jeśli używasz wersji
0.99
, spróbuj to zrobić, zamiast używaćprojection
argumentu słowa kluczowego: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()
Powinno to również zadziałać
matplotlib
1.0.x
, a nie tylko0.99
.źródło
from mpl_toolkits.mplot3d import Axes3D
. Potem powinno działać.python -c 'import matplotlib; print(matplotlib.__version__)'
2.0.2
?from mpl_toolkits.mplot3d import Axes3D
... :)Aby dodać do odpowiedzi Joe Kingtona (nie ma wystarczającej reputacji do komentarza), jest dobry przykład mieszania wykresów 2D i 3D w dokumentacji na http://matplotlib.org/examples/mplot3d/mixed_subplots_demo.html, która pokazuje projection = ' 3d 'działające w połączeniu z importem Axes3D.
from mpl_toolkits.mplot3d import Axes3D ... ax = fig.add_subplot(2, 1, 1) ... ax = fig.add_subplot(2, 1, 2, projection='3d')
W rzeczywistości, dopóki import Axes3D jest obecny, wiersz
from mpl_toolkits.mplot3d import Axes3D ... ax = fig.gca(projection='3d')
w wersji używanej przez PO również działa. (sprawdzane w matplotlib w wersji 1.3.1)
źródło
ax = fig.gca(projection='3d')
działa dla mnie. Zamiastax = plt.subplot(111,projection="3d")
. Używam wersji2.1.0
Zaimportuj całość mplot3d, aby użyć „projection = '3d'”.
Wstaw poniższe polecenie u góry skryptu. Powinno działać dobrze.
źródło
Napotykam ten sam problem, a odpowiedź @Joe Kington i @ bvanlew rozwiązuje mój problem.
ale powinienem dodać więcej informacji, gdy używasz pycharm i włączasz
auto import
.kiedy sformatujesz kod,
from mpl_toolkits.mplot3d import Axes3D
zostanie on automatycznie usunięty przez pycharm.więc moim rozwiązaniem jest
from mpl_toolkits.mplot3d import Axes3D Axes3D = Axes3D # pycharm auto import fig = plt.figure() ax = fig.add_subplot(111, projection='3d')
i działa dobrze!
źródło
# noinspection PyUnresolvedReferences
przed importem.Spróbuj tego:
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)
źródło