簡體   English   中英

使用類的 Python 繪圖

[英]Python Plotting Using Class

我必須定義一個類點(x,y),它代表歐幾里得平面中的一個點,我完成了:

class point():
    def __init__(P,x,y):
        P.x=x
        P.y=y

現在我必須通過創建以下方法來擴展這個類:

  1. 使用A=P.verticalReflect(y)返回一個點 A,它是 P 在 y 處的水平線的垂直反射。
  2. 返回一個點 B,它使用B=P.translate(x,y)將點 P 在 x 方向上平移 x 的距離,在 y 方向上平移 y 的距離。
  3. 使用 pyplot 使用P.display(options)顯示一個點。 我應該能夠讓用戶打印標簽,設置字體大小和從點偏移。

將啟動所創建的類的代碼示例如下:

P=point(2,3)
P.display(label="P",labeloffset=0.2)

A=P.verticalReflect(y=3.5)
A.display(c="green",label="A",labeloffset=0.1)
plt.axhline(y=3.5,c="k",ls="--")

我無法弄清楚從哪里開始在類中定義這些新方法。

您應該在類范圍內定義這些方法,而不是在何處以及以何種順序定義這些方法。 下面是一個簡單的例子:

import matplotlib.pyplot as plt    

class Point:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def verticalReflect(self,y):
        # your code. an example would be
        dy = y - self.y
        self.y += 2*dy
        return Point(self.x,self.y)

    def translate(self,x,y):
        self.x += x
        self.y += y
        return Point(self.x,self.y)

    def display(self,<options_here>):
        # your code. an example would be
        plt.plot(self.x,self.y,'o',<handle_options>)
        #plt.show()

plt.hold(True)
plt.axis([-10,10,-10,10])
p = Point(2,2)
p.display()
p.translate(3,-1)
p.display()
p.verticalReflect(3)
p.display() 
p.verticalReflect(2)
p.display()
plt.show()

如果你省略了<options_here><handle_options>部分,你就有了一個如何做的工作示例。 請注意,如果您取消注釋plt.show()調用,您可以立即在display()方法中繪制和顯示點。

我是這樣設置的,首先調用plt.hold(True)並首先在畫布上繪制所有點,然后僅在最后一行代碼中一次顯示所有點。

我還將return Point(self.x,self.y)添加到您的代碼中,因此您可以創建新點而不是更改現有點。 如果要保持起點不變,則應將self.x|y += ...更改為x|y += ...並返回return Point(x,y)

祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM