2012-08-08 71 views
2

根据文档页面: http://matplotlib.sourceforge.net/api/pyplot_api.html 使用axvline的方式就像是matplotlib axvline中的错误?

axvline(x=0, ymin=0, ymax=1) 

然而,这并不在我的电脑工作。没有画。相反,只是

axvline(x=0) 

没有设置ymin和ymax的作品。

我不确定这是否是一个错误。或者我错过了一些微妙的东西?

matplotlib.__version__ 
'0.99.1.1' 

uname -a 
Linux pc20172 2.6.32-41-generiC#94-Ubuntu SMP Fri Jul 6 18:00:34 UTC 2012 x86_64 GNU/Linux 

编辑:最小代码重现该问题。

from pylab import * 
ion() 
plot([1,2]) 
axvline(x=0.5, ymin=1, ymax=2) # No vertical line is drawn. 

clf() # Clear the figure to redo the plot. 
plot([1,2]) 
axvline(x=0.5) # Now the desired vertical line is drawn. 
+0

你确定没有画任何东西吗?如果这是图中唯一的一行,请尝试'axvline(x = 0,ymin = 0,ymax = 1,linewidth = 100)'使其更大。 – DSM 2012-08-08 13:51:55

+0

@DSM我不认为线宽有任何问题。我添加了几行代码,您可以测试。 – FJDU 2012-08-08 14:52:48

回答

4

从文档中help(axvline)

绘制在X的垂直线从YMINYMAX。随着YMIN = 0和YMAX = 1的默认值 ,这条线将永远跨越轴的 垂直范围,无论ylim设置,即使 你改变它们,例如。与:meth:set_ylim命令。 也就是, 的垂直范围是坐标轴坐标:0 =底部,0.5 =中间,1.0 =顶部 但x位置在数据坐标中。

所以

axvline(x=0.5, ymin=1, ymax=2) # No vertical line is drawn. 

被画一条线就在绘图区。如果使线宽变大,你可以看到这一点:

pic showing just-out-of-bounds effect

+0

感谢您的回答!我也在几秒前发现了这一点。 x和y使用不同的坐标系有点让人误解。顺便说一句,使用非常大的线宽的技巧非常有用!我不知道增加宽度也可以增加一条线的长度。 – FJDU 2012-08-08 15:04:19

+0

@ user789977:它不会增加线路本身的长度,但实际上它有一个小小的上限,除非它真的很大,否则很容易不会注意到。看到我的答案[这个问题](http://stackoverflow.com/questions/10297220/matplotlib-linewidth-is-added-to-the-length-of-a-line/10297860#10297860)。我应该承认,这只是偶然在这里工作的原因:我原本以为只是这条线路在一个案例中拥有情节边缘,而且很难看清楚。 – DSM 2012-08-08 15:09:01

+0

你真的很有帮助!谢谢! – FJDU 2012-08-08 16:53:56

2

确定。现在我意识到ymin和ymax不在数据坐标中,而是在“标准化”坐标中。所以,0表示剧情的底部,而1表示顶部。