取消某个轴上的偏移

3

编辑我的作品时,我注意到了这个细微差别。

以前,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个图表,这样做就不太合适了。我在网上搜索了一下,并没有找到太多相关信息。


你看过这个吗?https://dev59.com/zXA65IYBdhLWcg3wsw4X - parsethis
@putonspectacles 谢谢!但我认为应该有一个API或其他什么东西...那个答案看起来有点过度了。 - ZK Zhao
1
@ImportanceOfBeingErnest 那就是答案!谢谢! - ZK Zhao
@ImportanceOfBeingErnest 但是,我仍然想了解它的讨论,如果这真的是一种我不理解的好习惯?也许我应该在其他地方发布这个问题? - ZK Zhao
我同意SO可能不是讨论这个边距是否是一种好的数据可视化技术的最佳场所。我的个人观点是:只要保持一致,它并不真的很重要。 - ImportanceOfBeingErnest
2个回答

6
在 Matplotlib v2.0.x 中,默认的轴边距已经从 0 改为了 0.05,这个值控制着图表中数据周围的空白区域。更多关于此改变背后原因的信息,请参见这里
有几种方法可以恢复到以前的行为。
1) 若要将 margins 重置为 0,请针对单个 Axes 实例进行操作:
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) 要更改机器上所有图的默认值,请修改 matplotlibrc 文件以包含以下行:

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

请注意,如果要使用方法(1)并真正获得旧行为,则可能还需要设置plt.rcParams ['axes.autolimit_mode'] ='round_numbers'

明白了,我想造成不自然的原因是它与seaborn搭配使用了。如果没有网格线,图表会看起来更好。 - ZK Zhao

0

猜测它是否是良好的实践有点讨论。它似乎暗示着你的情节仍在继续(但你只显示了一个窗口),因此,如果你的情节仅在这个区域中定义,那么偏移就是有意义的。如果它实际上仍在继续,但你只绘制了这一部分,那么删除它是合理的。

可扩展的方法是

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

如果我在同一图中绘制多条线或其他元素,仍然可能会遇到很多问题。 - ZK Zhao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接