2017-03-10 46 views
2

刚刚注意到这个细微差别,当我编辑我的作品。Matplotlib:取消在matplotlib 2.0中引入轴的偏移量

此前,matplotlib是这样的:

x=[1,2,3,4,5] 
y=[4,5,5,2,1] 
plot(x,y,'-') 

enter image description here

但最近的升级,我相信以后,有偏移,这将返回这样

enter image description here

从我现在看到的情况来看,这有点无意义。我想知道

  1. 如果这个偏移量在数据可视化中是一个很好的实践吗?如果是这样,我会保持原样。

  2. 如何取消此抵消?

我可以手动plt.gca().set_xlim([1, 5])恢复限制,但如果我有另外20个地块,将无法扩展。我搜索了一下,并没有发现太多的信息。

+0

你见过这个http://stackoverflow.com/questions/3677368/matplotlib-format-axis-offset-values-to-whole-numbers-or-specific-number – putonspectacles

+0

@putonspectacles谢谢!但我认为应该有一个API或其他...这个答案看起来像是一种矫枉过正。 – cqcn1991

+1

@ImportanceOfBeingErnest这是一个污点!谢谢! – cqcn1991

回答

3

在matplotlib V2.0.x中,默认的轴余量已经改变,从0至0.05,这是控制上的轴周围的数据空白值。有关更改背后的推理,请参阅here

有几种方法可以恢复到以前的行为。

1)要重置margins为0的单个轴实例:

plt.margins(0) 

ax.margins(0) 

2)要重置margins为0用于在脚本中的所有情节,使用rcParams并设置这在您的脚本的顶部:

plt.rcParams['axes.autolimit_mode'] = 'round_numbers' 
plt.rcParams['axes.xmargin'] = 0. 
plt.rcParams['axes.ymargin'] = 0. 

3)要ch安格一台机器上的所有地块的默认值,修改您的matplotlibrc文件,包括这些行:

axes.autolimit_mode: round_numbers 
axes.xmargin  : 0. 
axes.ymargin  : 0. 

注意使用方法(1),真正得到旧的行为,您可能还需要设置plt.rcParams['axes.autolimit_mode'] = 'round_numbers'

+0

明白了,我会说我觉得不合适的原因是它与海宝混在一起。如果没有网格线,情节看起来会好很多。 – cqcn1991

0

猜猜它的良好做法是否有点讨论。它以某种方式表明你的情节继续(但你只是显示它的一个窗口),所以如果你的情节只在这个区域定义有一个偏移量是有道理的。如果它实际上继续,但你只是绘制这部分,那么删除它是合乎逻辑的。

的可扩展的方法是

plt.gca().set_xlim([np.min(x), np.max(x)]) 
+0

如果我在一个图中绘制几行或其他元素,这仍然是一个相当麻烦。 – cqcn1991