如何在matplotlib中删除顶部和右侧轴?

Mic*_*uhn 105 python matplotlib

我想要只有左轴和下轴,而不是默认的"盒装"轴样式,即:

+------+         |
|      |         |
|      |   --->  |
|      |         |
+------+         +-------
Run Code Online (Sandbox Code Playgroud)

这应该很简单,但我在文档中找不到必要的选项.

div*_*nex 112

这是来自官方网站HERE的建议Matplotlib 2.0解决方案:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

ax = plt.subplot(111)
ax.plot(x, y)

# Hide the right and top spines
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 初学者的附加问题:您可以在哪里找到基于 Matplotlib API 文档的答案?如果我去那里:https://matplotlib.org/api/axes_api.html 我没有看到对 `spine` 对象的任何引用,我也不会猜到这个关键字。 (5认同)
  • 这比较新版本的matplotlib中的接受答案要好. (2认同)
  • 您还可以使用“ax.spines.top.set_visible(False)”(点符号而不是括号和引号)。`spines[['top', 'right']].set_visible(False)` 也有效。 (2认同)

tim*_*day 62

或者,这个

def simpleaxis(ax):
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.get_xaxis().tick_bottom()
    ax.get_yaxis().tick_left()
Run Code Online (Sandbox Code Playgroud)

似乎在轴上实现相同的效果而不会失去旋转标签支持.

(Matplotlib 1.0.1;溶液的启发).


Aut*_*tic 32

[编辑] matplotlib现在(2013-10)版本1.3.0包含此内容

实际上只是添加了这个功能,你需要Subversion版本.您可以在此处查看示例代码.

我正在更新,说现在有一个更好的在线示例.仍然需要Subversion版本,但尚未发布此版本.

[编辑] Matplotlib 0.99.0 RC1刚刚发布,并包含此功能.

  • 示例链接现已断开. (8认同)
  • 请确保您对我的修改很酷. (2认同)

had*_*enj 14

如果您需要从所有图中删除它,您可以在样式设置(样式表或 rcParams)中删除脊椎。例如:

import matplotlib as mpl

mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
Run Code Online (Sandbox Code Playgroud)

如果要移除所有刺:

mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False
Run Code Online (Sandbox Code Playgroud)


nik*_*kow 9

如果您不需要刻度等(例如用于绘制定性插图),您还可以使用此快速解决方法:

使轴不可见(例如,使用plt.gca().axison = False),然后手动绘制它们plt.arrow.

  • @Rob:你说得对,我实际上在我想到的脚本中使用了不同的解决方案。我改变了我的答案,这现在应该可以工作了,但总的来说,上面接受的解决方案更好。 (2认同)

Evg*_*eev 7

(除了这里的综合答案之外,这更像是一个扩展评论.)


请注意,我们可以相互独立地隐藏这三个元素中的每一个:

  • 隐藏边框(又名"脊椎"):ax.set_frame_on(False)ax.spines['top'].set_visible(False)

  • 要隐藏刻度: ax.tick_params(top=False)

  • 要隐藏标签: ax.tick_params(labeltop=False)


San*_*ord 6

图书馆Seaborn具有内置的函数despine()。

只需添加:

import seaborn as sns
Run Code Online (Sandbox Code Playgroud)

现在创建图形。并在末尾添加:

sns.despine()
Run Code Online (Sandbox Code Playgroud)

如果查看该函数的某些默认参数值,它将删除顶部和右侧的书脊,并保留底部和左侧的书脊:

sns.despine(top=True, right=True, left=False, bottom=False)
Run Code Online (Sandbox Code Playgroud)

在此处查看更多文档:https : //seaborn.pydata.org/generation/seaborn.despine.html