2011-12-10 9 views
8

http://www.mathworks.com/help/techdoc/ref/stem3.html में प्रलेखित के रूप में stem3 कमांड के साथ 3 डी स्टेम साजिश बनाना काफी आसान है, मुझे आश्चर्य है कि matplotlib में एक समान कमांड है या नहीं? मैंने नवीनतम संस्करण के लिए ऑनलाइन दस्तावेज़ की जांच की, लेकिन एक नहीं मिला। क्या कोई कुछ सुझाव दे सकता है?क्या मैटलैब "स्टेम 3" का एक matplotlib समकक्ष है?

उत्तर

11

मैं matplotlib में stem3 के किसी भी प्रत्यक्ष समकक्ष से अनजान हूं। , बस एक पारंपरिक साजिश के साथ

import matplotlib.pyplot as plt 
import mpl_toolkits.mplot3d.art3d as art3d 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1, projection='3d') 

N = 100 
theta = np.linspace(0, 2*np.pi, N, endpoint=False) 
x = np.cos(theta) 
y = np.sin(theta) 
z = range(N) 
for xi, yi, zi in zip(x, y, z):   
    line=art3d.Line3D(*zip((xi, yi, 0), (xi, yi, zi)), marker='o', markevery=(1, 1)) 
    ax.add_line(line) 
ax.set_xlim3d(-1, 1) 
ax.set_ylim3d(-1, 1) 
ax.set_zlim3d(0, N)  
plt.show() 

enter image description here

+1

+1। यह मैटलैब के पेज पर उदाहरण से भी अच्छा दिखता है। क्या लाइनों के शीर्ष पर छोटी गेंदें भी हो सकती हैं? – EOL

+1

इसे आगे बढ़ाने के लिए प्रोत्साहन प्रदान करने के लिए धन्यवाद। सबसे पहले मैंने सोचा कि मुझे एक स्कैटर प्लॉट ओवरले करना होगा, लेकिन ऐसा लगता है कि यह एक [मार्कर] (http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.lines.Line2D.set_marker) सेट कर रहा है और [ set_markevery (2)] (http://matplotlib.sourceforge.net/api/artist_api.html#matplotlib.lines.Line2D.set_markevery) भी कर सकते हैं। – unutbu

+0

उत्कृष्ट जवाब। +1 – ptomato

3

unutbu के रूप में:: हालांकि, यह इस तरह के आंकड़े आकर्षित करने के लिए (कम से कम अपने मूल रूप में) Line3D s का उपयोग करके कठिन नहीं है

In [20]: from mpl_toolkits.mplot3d import Axes3D 
In [21]: fig = figure() 
In [22]: ax = fig.add_subplot(111, projection='3d') 
In [23]: x = [2,4,1,3] 
In [24]: y = [3,5,6,7] 
In [25]: z = [4,5,6,7] 
In [26]: for xx,yy,zz in zip(x,y,z): plot([xx,xx],[yy,yy],[0,zz], '-') 

enter image description here

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