【问题标题】:Matplotlib: cancelling the offset of axis introduced in matplotlib 2.0 [duplicate]Matplotlib:取消matplotlib 2.0中引入的轴偏移[重复]
【发布时间】:2017-07-31 11:49:29
【问题描述】:

我在编辑作品时注意到了这种细微差别。

以前,matplotlib 看起来像这样:

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

但我相信在最近的升级之后,有偏移量,会像这样返回

从我现在看到的情况来看,这有点不必要。我想知道

  1. 如果这个偏移量是数据可视化的好习惯?如果是这样,我会保持原样。

  2. 如何取消这个偏移量?

我可以通过plt.gca().set_xlim([1, 5]) 手动恢复限制,但如果我还有另外 20 个地块,这将无法扩展。我用谷歌搜索并没有找到太多关于此的信息。

【问题讨论】:

  • @putonspectacles 谢谢!但我认为应该有一个 API 或其他什么......这个答案看起来有点矫枉过正。
  • @ImportanceOfBeingErnest 这就是答案!谢谢!
  • @ImportanceOfBeingErnest 但是,我还是想知道它的讨论,如果这真的是一个我不明白的好习惯?也许我应该在其他地方发布这个问题?
  • 我同意 SO 可能不是讨论这个边距是否是一种好的数据可视化技术的最佳场所。我个人的看法是:只要你保持一致,这并不重要。

标签: python matplotlib data-visualization


【解决方案1】:

在 matplotlib v2.0.x 中,默认轴边距已从 0 更改为 0.05,这是控制轴上数据周围空白的值。请参阅here 了解有关此更改背后原因的更多信息。

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

1) 将单个 Axes 实例的 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) 要更改机器上所有绘图的默认值,请修改 matplotlibrc 文件以包含以下行:

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

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

【讨论】:

  • 明白,我会说我感到尴尬的原因是它与 seaborn 混合。如果没有网格线,情节会更好看。
【解决方案2】:

猜猜它的好做法是不是有点讨论。它以某种方式暗示您的情节继续(但您只是显示它的一个窗口),因此如果您的情节仅在此区域中定义,则具有偏移量是有意义的。如果它实际上继续,但你只是绘制了这部分,那么删除它是合乎逻辑的。

可扩展的方法是

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

【讨论】:

  • 如果我在一个图中绘制多条线或其他元素仍然会很麻烦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 2012-09-01
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多