ম্যাটপ্লটলিব: "অজানা প্রজেকশন '3 ডি'" ত্রুটি


130

আমি মাত্র ম্যাটপ্ল্লোলিব ইনস্টল করেছি এবং সেখানে উদাহরণ স্ক্রিপ্টগুলির মধ্যে একটি চালানোর চেষ্টা করছি। তবে আমি নীচে বিস্তারিত ত্রুটি চালাচ্ছি। আমি কি ভুল করছি?

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 ম্যাটপ্ল্লোলিব 1.0.0।
joaquin

আপনি অজগরটির কোন সংস্করণ ব্যবহার করছেন?
চার্লি পার্কার 21

উত্তর:


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
@dashesy - আপনি এখনও 3d অনুমান আমদানি করতে হবে: from mpl_toolkits.mplot3d import Axes3D। পরে, এটি কাজ করা উচিত।
জো কিংটন

2
আহা, আকর্ষণীয়! এটি উদাহরণে দেখেছেন কিন্তু অনুমান করেছেন যে এটি কেবল পুরানো সংস্করণগুলির জন্য। ধন্যবাদ
ছদ্মবেশী

2
পাইথন 3 জন্য মুদ্রণ সংস্করণের জন্য কমান্ডpython -c 'import matplotlib; print(matplotlib.__version__)'
চার্লি পার্কার

2
সংস্করণ সম্পর্কে কি 2.0.2?
চার্লি পার্কার 21

1
আমি পাইথন 2.7 জন্য এই ত্রুটি আছে, matplotlib .__ version__ '2.2.3' ..... কারণ আমি ব্যবহার করা হয় নি from mpl_toolkits.mplot3d import Axes3D... :)
ntg

64

জো জো কিংটনের উত্তরে যুক্ত করার জন্য (কোনও মন্তব্যের যথেষ্ট খ্যাতি নেই) ডকুমেন্টেশনে 2mat এবং 3 ডি প্লট মিশ্রণের একটি ভাল উদাহরণ রয়েছে http://matplotlib.org/exults/mplot3d/mixed_subplots_demo.html যা প্রক্ষেপণ দেখায় = ' এক্স 3 ডি আমদানির সাথে মিলিয়ে 3 ডি 'কাজ করছে।

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

প্রকৃতপক্ষে অক্ষ হিসাবে 3D আমদানি লাইনটি উপস্থিত রয়েছে

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

ওপি দ্বারা ব্যবহৃত হিসাবে কাজ করে। (ম্যাটপ্ল্লিটিব সংস্করণ ১.৩.১ এর সাথে চেক করা হয়েছে)


4
এটি জানতে আসলেই সহায়ক! অ্যাক্সেস 3 ডি আমদানি কখনই স্পষ্টভাবে ব্যবহৃত হয় না তবে এটি প্রজেকশন = '3 ডি' কে ত্রুটি ছাড়াই ব্যবহার করতে সক্ষম করে
চুলা

3
আমদানি বিবৃতিটি এটি আমার পক্ষে কার্যকর হয়েছে। তবে আমি এই কোডটি চালিয়ে আইকি অনুভব করতে সাহায্য করতে পারি না ... পৃষ্ঠায় সম্পূর্ণ পৃথক পৃথক দেখায় এমন কিছু কোড বুটস্ট্র্যাপ করতে আমদানির বিবৃতি ব্যবহার করা খারাপ ডিজাইনের মতো মনে হচ্ছে
ইজবব

2
ax = fig.gca(projection='3d')আমার জন্য কাজ করে। পরিবর্তে ax = plt.subplot(111,projection="3d")। আমি2.1.0
জনি ঝাং

2
@ ইজবব সম্পূর্ণ ম্যাটপ্ল্লোলিব এপিআই পাছার একটি ব্যথা। আমি যদি একটি বেসিক প্লট তৈরি করতে চাই তবে আমাকে সর্বদা গুগল করতে হয়। অন্য কোনও পাইথন লাইবের এমন ক্র্যাপিআইপি API নেই
সাইমন এইচ

13

"প্রোজেকশন = '3 ডি'" ব্যবহার করতে mplot3d সম্পূর্ণ আমদানি করুন।

আপনার স্ক্রিপ্টের উপরে নীচে কমান্ডটি সন্নিবেশ করুন। এটা জরিমানা চালানো উচিত।

এমপিএল_ টলকিটস থেকে এমপি্লট 3 ডি আমদানি করুন

4

আমি একই সমস্যাটির মুখোমুখি হই এবং @ জো কিংটন এবং @ ব্যাভনলেউয়ের উত্তর আমার সমস্যাটি সমাধান করে।

আপনি যখন পিচার্ম ব্যবহার করেন এবং সক্ষম করেন তখন আমার আরও তথ্য যুক্ত করা উচিত auto import

যখন আপনি কোডটি ফর্ম্যাট করবেন, কোডটি from mpl_toolkits.mplot3d import Axes3Dপাইচার্ম দ্বারা স্বয়ংক্রিয়ভাবে সরানো হবে।

সুতরাং, আমার সমাধান হয়

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.