2014-01-18 465 views
3

今天我決定用Python編寫簡單的程序,只是在考試前練習。首先,我想畫出罪惡和情節,這並不難。但之後,我決定挑戰自己並繪製切線圖。在Python中繪製切線圖(matplotlib)

import pylab as p 

x= p.arange(-1.0,1.0,0.1) 
y= (p.sin(2*p.pi*x))/(p.cos(2*p.pi*x)) 

p.plot(x,y,'g-',lw=1) 
p.show() 

它返回...啊...這樣的:

enter image description here

正如你所看到的,它看起來更像ECK情節比切線情節。有誰知道什麼是錯的?

+1

嘗試縮小步長。 – M4rtini

回答

3

如果增加x點的數量,

import pylab as p 
import numpy as np 
x = p.linspace(-1.0, 1.0, 1000) 
y = (p.sin(2 * p.pi * x))/(p.cos(2 * p.pi * x)) 
p.plot(x, y, 'g-', lw=1) 
p.show() 

你得到的東西是這樣的: enter image description here

通知的y-range是如何得到較大。 Matplotlib無法向您顯示切線曲線中的很多小值,因爲範圍太大。

可以通過忽略漸近線附近的極大值來改善情節。使用Paul's workaround處理漸近線,

import pylab as p 
import numpy as np 
x = p.linspace(-1.0, 1.0, 1000) 
y = (p.sin(2 * p.pi * x))/(p.cos(2 * p.pi * x)) 

tol = 10 
y[y > tol] = np.nan 
y[y < -tol] = np.nan 

p.plot(x, y, 'g-', lw=1) 
p.show() 

enter image description here

+0

也謝謝你,另一個很好的解決方案,我要完美地寫考試;) – Szczepenson

+0

@Szczepenson:祝你好運! – unutbu

3
import pylab as p 

x= p.arange(-1.0,1.0,0.01) # <- 0.01 step size. 
y= (p.sin(2*p.pi*x))/(p.cos(2*p.pi*x)) 
# y = p.tan(2*p.pi*x) 
p.plot(x,y,'g-',lw=1) 
p.ylim([-4, 4]) # <- Restricting the ylim so we don't see the ~inf values. 
p.show() 

這將是結果,如果你不設置ylim。 (這些值趨近於無窮)

Result without setting ylim

結果與設定ylim。

Result

+0

非常感謝,我不知道ylim(),它非常有用! – Szczepenson