2012-12-22 13 views
19

के साथ समीकरण को चित्रित करना मैं एक ऐसा फ़ंक्शन बनाने की कोशिश कर रहा हूं जो जो भी सूत्र मुझे बताएगा उसे ग्राफ करेगा।matplotlib

import numpy as np 
import matplotlib.pyplot as plt 
def graph(formula, x_range): 
    x = np.array(x_range) 
    y = formula 
    plt.plot(x, y) 
    plt.show() 

जब मैंने इसे निम्न त्रुटि होता है कॉल करने के लिए प्रयास करते हैं, मेरा मानना ​​है कि यह इससे पहले कि यह y = formula जाता गुणा करने के लिए कोशिश कर रहा है।

graph(x**3+2*x-4, range(-10, 11)) 

Traceback (most recent call last): 
    File "<pyshell#23>", line 1, in <module> 
    graph(x**3+2*x-4, range(-10, 11)) 
NameError: name 'x' is not defined 

उत्तर

16

इसका कारण यह है लाइन में

graph(x**3+2*x-4, range(-10, 11)) 

एक्स परिभाषित नहीं है।

एक स्ट्रिंग के रूप में प्लॉट करना चाहते हैं और eval का उपयोग अभिव्यक्ति के रूप में मूल्यांकन करने का सबसे आसान तरीका है।

तो कम से कम संशोधनों के साथ अपने कोड

import numpy as np 
import matplotlib.pyplot as plt 
def graph(formula, x_range): 
    x = np.array(x_range) 
    y = eval(formula) 
    plt.plot(x, y) 
    plt.show() 

होगा और आप

graph('x**3+2*x-4', range(-10, 11)) 
+5

यहां eval का उपयोग करने के लिए बिल्कुल कोई ज़रूरत नहीं है, और यह ओवरहेड – goncalopp

+0

जोड़ता है जो आपको पूरी तरह से काम करता है। सोचा कि यह मामला हो सकता है लेकिन उसे पता नहीं था कि इसे कैसे छीनना है –

44

आपका अनुमान सही है: कोड x**3+2*x-4 का मूल्यांकन करने का प्रयास कर रहा है। दुर्भाग्य से आप इसे ऐसा करने से वास्तव में नहीं रोक सकते हैं। अच्छी खबर यह है कि पायथन में, कार्य प्रथम श्रेणी की वस्तुएं हैं, जिनके द्वारा मेरा मतलब है कि आप उन्हें किसी अन्य चर की तरह व्यवहार कर सकते हैं। तो अपने समारोह ठीक करने के लिए, हम कर सकता है:

import numpy as np 
import matplotlib.pyplot as plt 

def graph(formula, x_range): 
    x = np.array(x_range) 
    y = formula(x) # <- note now we're calling the function 'formula' with x 
    plt.plot(x, y) 
    plt.show() 

def my_formula(x): 
    return x**3+2*x-4 

graph(my_formula, range(-10, 11)) 

आप यह सब एक पंक्ति में करना चाहता था, तो आप इस्तेमाल कर सकते हैं जो एक lambda समारोह, एक नाम है जहाँ आप डॉन 'के बिना बस एक छोटी समारोह है जो कहा जाता है टी उपयोग def या return:

graph(lambda x: x**3+2*x-4, range(-10, 11)) 

और range के बजाय, आप np.arange (जो गैर पूर्णांक वेतन वृद्धि के लिए अनुमति देता है) देख सकते हैं, और np.linspace, जो आप शुरू निर्दिष्ट रोकने के लिए अनुमति देता है, और की संख्या उपयोग करने के लिए अंक।

+0

मदद –

+0

मदद के लिए धन्यवाद। एचटीएमएल में इंटरैक्टिव ग्राफ डालने का कोई तरीका है, जैसे कि जुपीटर नोटबुक, मैं एक .html फ़ाइल बनाना चाहता हूं जो लोग खेल सकते हैं। – xappppp

1

के रूप में यह फोन एक समीकरण है कि (सर्कल या अतिशयोक्ति की तरह) एक विशिष्ट चर के लिए हल नहीं है प्लॉट करने के लिए कर सकते हैं :

import numpy as np 
import matplotlib.pyplot as plt 
plt.figure() # Create a new figure window 
xlist = np.linspace(-2.0, 2.0, 100) # Create 1-D arrays for x,y dimensions 
ylist = np.linspace(-2.0, 2.0, 100) 
X,Y = np.meshgrid(xlist, ylist) # Create 2-D grid xlist,ylist values 
F = X**2 + Y**2 - 1 # 'Circle Equation 
plt.contour(X, Y, F, [0], colors = 'k', linestyles = 'solid') 
plt.show() 

अधिक इसके बारे में: http://courses.csail.mit.edu/6.867/wiki/images/3/3f/Plot-python.pdf