2013-11-03 18 views
6

Tôi đang dạy bản thân mình về matplotlib và Python và tôi đang gặp khó khăn trong việc vẽ một phương trình cho một đường cong elip. Tôi có phương trình xuống nhưng tôi không làm y^2Python - đường cong elliptic matplotlib

Đây là càng nhiều rắc rối như tôi đã có thể để có được bản thân mình vào cho đến nay:

from mpl_toolkits.axes_grid.axislines import SubplotZero 
import matplotlib.pyplot as plt 
import numpy as np 
from pylab import * 


def plotGraph(): 
    fig = plt.figure(1) 
    ax = SubplotZero(fig, 111) 
    fig.add_subplot(ax) 

    for direction in ["xzero", "yzero"]: 
     ax.axis[direction].set_axisline_style("-|>") 
     ax.axis[direction].set_visible(True) 

    a = 5; b = 25 
    x = np.arange(-50.0, 50.0, 1.0) 
    y = pow(x,3) + a*x + b 

    xmin = -50; xmax = 50; ymin = -50; ymax = 50 
    v = [xmin, xmax, ymin, ymax] 
    ax.axis(v) 

    ax.plot(x, pow(y,2)) 

    #grid() 
    #ax.grid(color='r', linestyle='-', linewidth=2) 

    show() 


def main(): 
    plotGraph() 


if __name__ == '__main__': 
    main() 

Các axis() là có bởi vì tôi cũng đã cố gắng để có được một biểu đồ rõ ràng hơn với các đường lưới, và tôi nghĩ rằng grid() cũng sẽ chăm sóc điều đó nhưng dường như không. Tôi cũng sẽ cố gắng làm cho nó tương tác khi bạn nhấp vào các điểm bạn muốn và nó tính toán, nhưng nhìn qua các tài liệu có vẻ như rất nhiều tùy chọn chuột tương tác nhưng tôi không thấy tương tác chuột tạo ra một số sự kiện bằng cách nhấp vào trên một điểm trên biểu đồ (sau lần thứ 3 đọc nó qua tôi vẫn còn thiếu nó).

Tôi vừa mới chuyển từ số pyplot summary on matplotlib nhưng tôi không thấy những gì tôi đang làm sai ở đây. Cốt truyện của đường cong elip là cách tắt, thậm chí không gần.

Đây có lẽ là sai lầm của người mới bắt đầu nên một lập trình viên cơ sở mất một giây để đọc điều này có thể sẽ thấy rất nhanh chóng tại sao tôi không nhận được đường cong mà tôi muốn.

Trả lời

12

Có, bạn nói đúng, bạn không làm y^2. Để vẽ đường cong elliptic trong matplotlib tôi đã sử dụng mã này (thử nghiệm bằng Python 3):

import numpy as np 
import matplotlib.pyplot as plt 

def main(): 
    a = -1 
    b = 1 

    y, x = np.ogrid[-5:5:100j, -5:5:100j] 
    plt.contour(x.ravel(), y.ravel(), pow(y, 2) - pow(x, 3) - x * a - b, [0]) 
    plt.grid() 
    plt.show() 

if __name__ == '__main__': 
    main() 

Tôi đã có âm mưu này: enter image description here

Đây có phải là những gì bạn cần?

+0

Có cảm ơn đó là những điều cơ bản về những gì tôi đang cố gắng tiếp cận. +1 và được chấp nhận. Không chắc chắn nếu bạn tình cờ biết làm thế nào để làm nổi bật/hiển thị một điểm cụ thể (s) trên đường cong và nhận được một dòng giữa chúng. – stackuser

+0

Bạn được chào đón. Tôi không chắc chắn, nhưng bạn có thể tạo một câu hỏi khác với mô tả về những gì bạn muốn. – ilalex

Các vấn đề liên quan