2011-06-10 17 views
8

मैं इस पर तीन सर्कल के साथ matplotlib में एक 3 डी प्लॉट बनाने की कोशिश कर रहा हूं, प्रत्येक उत्पत्ति पर केंद्रित है और 1 के त्रिज्या के साथ, विभिन्न दिशाओं में इशारा करते हुए - उदाहरण के लिए त्रिज्या 1 के क्षेत्र को चित्रित करने के लिए।matplotlib में एक 3 डी पैच संग्रह कैसे प्लॉट करें?

2 डी में मैं एक सर्कल पैच संग्रह कर दूंगा और इसे अक्ष में जोड़ दूंगा। 3 डी में मुझे पैच को बिल्कुल दिखाने में परेशानी हो रही है, अकेले उन्हें अलग-अलग दिशाओं में उन्मुख करने दें।

import matplotlib 
import matplotlib.pyplot as P 
import mpl_toolkits.mplot3d as M3 

fig = P.figure() 
ax = fig.add_subplot(1, 1, 1, projection='3d') 
circles = matplotlib.collections.PatchCollection(
    [matplotlib.patches.Circle((0, 0), 1) for count in range(3)], 
    offsets=(0, 0)) 
M3.art3d.patch_collection_2d_to_3d(circles, zs=[0], zdir='z') 
ax.add_collection(circles) 
P.show() 

इस कार्यक्रम चल रहा है पैच के चेहरे रंग के साथ नीले, अर्थात पूरे भूखंड खिड़की भरता है, कोई फर्क नहीं पड़ता कि कैसे मैं भूखंड बारी बारी से। अगर मैं PatchCollection() कॉल में facecolor='none' सेट करता हूं, तो खाली Axes3D दिखाता है।

बातें मैं कोशिश की है:

  • अगर मैं एक CircleCollection बजाय PatchCollection एक के उपयोग करते हैं, कोई पैच बिल्कुल ही दिखाई।
  • कॉल में zs पैरामीटर विषम है; मैं डाल करने के लिए उम्मीद करेंगे या तो zs=0 (एक z निर्देशांक तीनों पैच के लिए) या zs=[0,0,0] (प्रत्येक पैच के लिए एक अलग z निर्देशांक), लेकिन उन दोनों के एक त्रुटि फेंक:

    ValueError: setting an array element with a sequence.

  • उन्मुख करने के लिए अलग-अलग पैच, मैं zdir=['x', 'y', 'z'] जैसे कुछ पास करने में सक्षम होने की अपेक्षा करता हूं लेकिन परिणाम अलग नहीं हैं चाहे मैं इसे पास करता हूं या 'z' या ['z']

  • मैं भी 2 डी 3 डी के लिए से पैच संग्रह परिवर्तित करने की बजाय ax.add_collection3d(circles, zs=[0, 0, 0], zdir=['x', 'y', 'z']) ऐसा करने में सक्षम होने की उम्मीद होता, लेकिन वह भी एक त्रुटि फेंकता है:

    AttributeError: 'Patch3DCollection' object has no attribute 'set_sort_zpos'

+0

@ लिलिथ का जवाब एक उत्कृष्ट वैकल्पिक दृष्टिकोण है, क्या कोई मुझे बता सकता है कि मेरा दृष्टिकोण क्यों काम नहीं करता? – ptomato

उत्तर

11
import matplotlib.pyplot as plt 
from matplotlib.patches import Circle, PathPatch 
from mpl_toolkits.mplot3d import Axes3D 
import mpl_toolkits.mplot3d.art3d as art3d 


fig = plt.figure() 
ax=fig.gca(projection='3d') 

for i in ["x","y","z"]: 
    circle = Circle((0, 0), 1) 
    ax.add_patch(circle) 
    art3d.pathpatch_2d_to_3d(circle, z=0, zdir=i) 


ax.set_xlim3d(-2, 2) 
ax.set_ylim3d(-2, 2) 
ax.set_zlim3d(-2, 2) 

plt.show() 
+0

सर्कल को (x, y, z) = (ए, बी, सी) पर सर्कल करने के लिए इसे कैसे सामान्यीकृत किया जा सकता है? – kevinkayaks

संबंधित मुद्दे