2012-02-05 17 views
18

matplotlib हम लाइनों आकर्षित कर सकते हैं में कम से कम 2 तरीकों का उपयोग कर:matplotlib: बढ़ाया लाइन 2 पर नियंत्रण अंक

  1. plt.plot

    plt.plot([1,2],[1,2],color='k',marker='o') 
    
  2. Line2D विधि

    line = lines.Line2D([0.3,0.6],[0.9,0.3],linestyle='dashed',color='k') 
    plt.axes().add_line(line) 
    

मुझे संदेह है कि दोनों विधियां समान हैं पाठ्यक्रम के कार्यान्वयन में। लेकिन वैसे भी, यह वास्तव में 2 बताए गए बिंदुओं के बीच एक रेखा खींचता है। कभी-कभी मुझे ग्राफ सीमा तक उन 2 बिंदुओं पर लाइन को विस्तारित करने की आवश्यकता होती है। निश्चित रूप से मैं इसे y = ax + b के रूप में गणना कर सकता हूं, लेकिन क्या किसी को रास्ता आसान लगता है? अगर मैं कुछ अतिरिक्त विकल्प रख सकते हैं

बिल्कुल सही मामला है, लेकिन मैं इसे खोजने के लिए सक्षम नहीं था।

+0

मुझे लगता है कि वहाँ कोई सीधा रास्ता है। ध्यान दें कि रेखाएं एन तत्वों के सरणी से खींची गई हैं। यही है, वे सीधे नहीं होने के लिए डिजाइन किए गए हैं। एक सामान्य रूप में लाइन 2 डी का विस्तार करने के लिए आपको सिर के बिंदु और रेखा की पूंछ के दो अंतिम जोड़े को देखने की आवश्यकता है। यह इतना अजीब बात है कि शायद इसे दो-बिंदु रेखा के विशेष मामले के लिए ध्यान में नहीं रखा गया था, जहां यह 'plt.plot ([1,2], [1,2], रंग = के लिए – joaquin

+0

+1 को समझ में आता है। 'k', मार्कर = 'ओ') ' –

उत्तर

6

अच्छा दोपहर के भोजन के बाद मैं एक तरह से numpy का उपयोग कर खोजने के लिए सक्षम था।

def drawLine2P(x,y,xlims): 
    xrange = np.arange(xlims[0],xlims[1],0.1) 
    A = np.vstack([x, np.ones(len(x))]).T 
    k, b = np.linalg.lstsq(A, y)[0] 
    plt.plot(xrange, k*xrange + b, 'k') 
3

इस पर बहुत देर हो चुकी है, लेकिन मैं अभी भी गुगलते समय इस पर आया हूं। मैं matplotlib में ऐसा करने में सक्षम नहीं होने का भी बीमार था, इसलिए मैंने abline_plot लिखा था। यदि अक्ष की सीमा बदल जाती है तो इसमें 2 डी लाइन को अपडेट करने के लिए कॉलबैक शामिल हैं। नीचे दिए गए लिंक में abline_plot उदाहरण के लिए

खोजें।

http://statsmodels.sourceforge.net/devel/examples/generated/example_interactions.html

प्रलेखन:

http://statsmodels.sourceforge.net/devel/generated/statsmodels.graphics.regressionplots.abline_plot.html#statsmodels.graphics.regressionplots.abline_plot

कार्यान्वयन:

https://github.com/statsmodels/statsmodels/blob/master/statsmodels/graphics/regressionplots.py#L572

संपादित करें: एक सरल एक है कि अपडेट नहीं करता

import matplotlib.pyplot as plt 
from matplotlib import lines as mpl_lines 

def slope_from_points(point1, point2): 
    return (point2[1] - point1[1])/(point2[0] - point1[0]) 

def plot_secant(point1, point2, ax): 
    # plot the secant 
    slope = slope_from_points(point1, point2) 
    intercept = point1[1] - slope*point1[0] 
    # update the points to be on the axes limits 
    x = ax.get_xlim() 
    y = ax.get_ylim() 
    data_y = [x[0]*slope+intercept, x[1]*slope+intercept] 
    line = mpl_lines.Line2D(x, data_y, color='red') 
    ax.add_line(line) 
    return ax.figure() 
2

आशा इस मदद करता है

import matplotlib.pyplot as plt 
# I am generating 2 random points, u might want to update these 
x1,y1,x2,y2 = np.random.uniform(-1,1,4) 
# make use of line equation to form function line_eqn(x) that generated y 
line_eqn = lambda x : ((y2-y1)/(x2-x1)) * (x - x1) + y1   
# generate range of x values based on your graph 
xrange = np.arange(-1.2,1.2,0.2) 
# plot the line with generate x ranges and created y ranges 
plt.plot(xrange, [ line_eqn(x) for x in xrange], color='k', linestyle='-', linewidth=2) 
संबंधित मुद्दे