Matplotlib: "अज्ञात प्रक्षेपण '3 डी'" त्रुटि


130

मैं बस matplotlib स्थापित किया है और वहाँ एक उदाहरण स्क्रिप्ट चलाने की कोशिश कर रहा हूँ। हालाँकि मैं नीचे दी गई त्रुटि में चलता हूँ। मैं क्या गलत कर रहा हूं?

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()

त्रुटि है

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'

2
इस धागे पर एक नज़र डालें: comments.gmane.org/gmane.comp.python.matplotlib.devel/8904
मनोज गोविंदन

यह मेरे लिए पूरी तरह से काम करता है। विंडोज एक्सपी, सक्रिय राज्य अजगर 2.6.5 matplotlib 1.0.0।
जौक्विन

अजगर आप किस संस्करण का उपयोग कर रहे हैं?
चार्ली पार्कर

जवाबों:


114

सबसे पहले, मुझे लगता है कि संस्करण mplot3Dमें थोड़ा अलग तरीके से काम किया है जो वर्तमान संस्करण में है ।matplotlib0.99matplotlib

आपके द्वारा कौन सा संस्करण उपयोग किया जा रहा है? (चलाने की कोशिश करें:python -c 'import matplotlib; print matplotlib."__version__")

मैं अनुमान लगा रहा हूं कि आप संस्करण चला रहे हैं 0.99, जिस स्थिति में आपको या तो कुछ अलग वाक्यविन्यास का उपयोग करना होगा या हाल के संस्करण के लिए अपडेट करना होगा matplotlib

यदि आप संस्करण चला रहे हैं 0.99, तो projectionकीवर्ड तर्क का उपयोग करने के बजाय ऐसा करने का प्रयास करें :

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()

यह काम करना चाहिए matplotlib 1.0.x, साथ ही, बस नहीं 0.99


47
@ डैडी - आपको अभी भी 3 डी अनुमानों को आयात करने की आवश्यकता होगी from mpl_toolkits.mplot3d import Axes3D:। बाद में, यह काम करना चाहिए।
जो किंग्टन

2
अहा, दिलचस्प! इसे उदाहरणों में देखा लेकिन अनुमान लगाया कि यह केवल पुराने संस्करणों के लिए है। धन्यवाद
dashesy

2
अजगर 3 के लिए प्रिंट संस्करण की कमान हैpython -c 'import matplotlib; print(matplotlib.__version__)'
चार्ली पार्कर

2
संस्करण के बारे में क्या 2.0.2?
चार्ली पार्कर

1
अजगर 2.7, matplotlib .__ संस्करण__ '2.2.3' ..... के लिए मेरी यह त्रुटि है ..... क्योंकि मैं उपयोग नहीं कर रहा था from mpl_toolkits.mplot3d import Axes3D... :)
ntg

64

सिर्फ जो किंगटन के जवाब (एक टिप्पणी के लिए पर्याप्त प्रतिष्ठा नहीं) में जोड़ने के लिए http://matplotlib.org/examples/mplot3d/mixed_bubplots_demo.html पर प्रलेखन में 2d और 3 डी भूखंडों को मिलाने का एक अच्छा उदाहरण है जो प्रक्षेपण = 'को दर्शाता है।' 3 डी 'Axes3D आयात के साथ संयोजन में काम कर रहा है।

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

वास्तव में जब तक Axes3D आयात लाइन मौजूद है

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

जैसा कि ओपी द्वारा उपयोग किया जाता है, यह भी काम करता है। (matplotlib संस्करण 1.3.1 के साथ जाँच की गई)


4
यह वास्तव में जानने के लिए वास्तव में उपयोगी है! हालांकि Axes3D आयात का स्पष्ट रूप से उपयोग नहीं किया जाता है, यह प्रक्षेपण को सक्षम बनाता है = '3 डी' त्रुटि के बिना उपयोग किया जा सकता है
स्टोव

3
आयात के बयान ने मेरे लिए काम कर दिया। लेकिन मैं इस कोड को चलाकर icky को महसूस करने में मदद नहीं कर सकता ... कुछ बयान बूटस्ट्रैप करने के लिए आयात का उपयोग करके कुछ कोड जो सतह पर पूरी तरह से अलग दिखते हैं, एक खराब डिजाइन की तरह लगता है
Ezbob

2
ax = fig.gca(projection='3d')मेरे लिए काम करता है। के बजाय ax = plt.subplot(111,projection="3d")। मैं के संस्करण का उपयोग कर रहा2.1.0
जॉनी झांग

2
@Ezbob पूरे matplotlib एपीआई सिर्फ गधे में एक दर्द है। अगर मुझे एक मूल प्लॉट भी बनाना है तो मुझे हमेशा गूगल करना होगा। किसी अन्य अजगर के लिब में ऐसा भद्दा एपीआई नहीं है
साइमन एच

13

"प्रक्षेपण = '3 डी'" का उपयोग करने के लिए mplot3d संपूर्ण आयात करें।

अपनी स्क्रिप्ट के ऊपर नीचे कमांड डालें। इसे ठीक चलना चाहिए।

mpl_toolkits से mplot3d आयात करें

4

मैं उसी समस्या का सामना करता हूं, और @ जोए किंगटन और @ bvanlew का जवाब मेरी समस्या को हल करता है।

लेकिन जब आप pycharm का उपयोग करते हैं और सक्षम करते हैं तो मुझे और अधिक जानकारी मिलनी चाहिए auto import

जब आप कोड को प्रारूपित करते हैं, तो कोड from mpl_toolkits.mplot3d import Axes3Dpycharm द्वारा स्वतः हटा दिया जाएगा।

तो, मेरा समाधान है

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

और यह अच्छी तरह से काम करता है!


आप # noinspection PyUnresolvedReferencesआयात से पहले भी रख सकते हैं ।
माइकल बिकोवित्स्की

0

इसे इस्तेमाल करे:

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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.