2013-06-05 31 views
4

最小工作示例:垂直線不尊重最小,最大極限(matplotlib)問題的

import matplotlib.pyplot as plt 

horiz_line = 0.0005 
vert_line = 110 
x_data = [10, 30, 50, 70, 90, 110, 130, 150, 170, 190, 210, 230, 250, 270, 290, 310, 330, 350, 370, 390, 410, 430, 450, 470, 490] 
y_data = [0.0074999999999999997, 0.011875, 0.0057812499999999999, 0.0036458333333333334, 0.0020312500000000001, 0.0013125000000000001, 0.00098958333333333342, 0.00089285714285714283, 0.00074218750000000001, 0.00093749999999999997, 0.00071874999999999999, 0.00088068181818181821, 0.00078125000000000004, 0.0004807692307692308, 0.00055803571428571425, 0.00083333333333333339, 0.00066406250000000005, 0.00069852941176470592, 0.00059027777777777778, 0.00059210526315789478, 0.00062500000000000001, 0.0007291666666666667, 0.00068181818181818187, 0.00059782608695652171, 0.00053385416666666663] 

fig = plt.figure() # create the top-level container 

# horizontal line 
plt.axhline(y=horiz_line, xmin=0, xmax=max(x_data), color='red', zorder=1) 

# vertical line 
plt.axvline(x=vert_line, ymin=0, ymax=max(y_data), color='red', zorder=2) 

plt.scatter(x_data, y_data, s=150, color='blue', zorder=3) 

plt.show() 

,給了我這樣的:

enter image description here

通知小紅垂直線在x=110 。爲什麼它不符合我使用ymin=0, ymax=max(y_data)設置的最大限制(應該是min=0; max=0.011875)?

+4

因爲在'axhline'和'axvline'方法調用的座標是_Axes coordinates_,不_data coordinates_。 – hooy

+0

它在不同的座標空間嗎? –

+0

@nordev哦,我現在看到了。我也問過這個問題後,我也發現了這個問題(http://stackoverflow.com/questions/16930328/vertical-horizo​​ntal-lines-in-matplotlib?rq=1)。小心格式化您的評論作爲答案,所以我可以將其標記爲已解決? – Gabriel

回答

15

似乎要通過hlinesvlines,而不是axhlineaxvline提供的功能,因爲這兩個後者使用Axes coordinate system,而hlinesvlines使用data coordinate system

所以,你的代碼應該是

import matplotlib.pyplot as plt 

horiz_line = 0.0005 
vert_line = 110 
x_data = [10, 30, 50, 70, 90, 110, 130, 150, 170, 190, 210, 230, 250, 270, 290, 310, 330, 350, 370, 390, 410, 430, 450, 470, 490] 
y_data = [0.0074999999999999997, 0.011875, 0.0057812499999999999, 0.0036458333333333334, 0.0020312500000000001, 0.0013125000000000001, 0.00098958333333333342, 0.00089285714285714283, 0.00074218750000000001, 0.00093749999999999997, 0.00071874999999999999, 0.00088068181818181821, 0.00078125000000000004, 0.0004807692307692308, 0.00055803571428571425, 0.00083333333333333339, 0.00066406250000000005, 0.00069852941176470592, 0.00059027777777777778, 0.00059210526315789478, 0.00062500000000000001, 0.0007291666666666667, 0.00068181818181818187, 0.00059782608695652171, 0.00053385416666666663] 

fig = plt.figure() # create the top-level container 

# horizontal line 
plt.hlines(y=horiz_line, xmin=0, xmax=max(x_data), color='red', zorder=1) 

# vertical line 
plt.vlines(x=vert_line, ymin=0, ymax=max(y_data), color='red', zorder=2) 

plt.scatter(x_data, y_data, s=150, color='blue', zorder=3) 

plt.show() 

enter image description here

+0

太棒了!非常感謝你! – Gabriel

+1

很高興能有所幫助! – hooy