如何在matplotlib中删除上轴和右轴?


133

而不是默认的“装箱”轴样式,我只希望有左轴和底轴,即:

+------+         |
|      |         |
|      |   --->  |
|      |         |
+------+         +-------

这应该很容易,但是我在文档中找不到必要的选项。

Answers:


153

这是官方网站HERE推荐的Matplotlib 3解决方案:

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()

在此处输入图片说明


2
这比新版本的matplotlib中可接受的答案更好。
2013年

3
初学者的附加问题:您可以在哪里找到基于Matplotlib API文档的答案?如果我去那儿:matplotlib.org/api/axes_api.html我看不到对该spine对象的任何引用,也不会猜到该关键字。
Eric Burel

63

或者,这

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()

似乎在轴上实现了相同的效果,而不会丢失旋转的标签支撑。

(Matplotlib 1.0.1;溶液的启发)。


33

[edit] matplotlib现已发布(2013-10),版本为1.3.0,其中包括

该功能实际上只是添加的,您需要使用Subversion版本。您可以在此处查看示例代码。

我只是想说现在在线上有一个更好的例子。尽管仍然需要Subversion版本,但尚未发布。

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


在尝试将以上内容与旋转标签一起使用之前,请确保已阅读matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/…上有关刻度标记支持不完整的警告!
2011年

看起来取决于您如何构造轴。mpl.subplots不能使用这种方式生成的轴?
Stefan van der Walt

8
现在示例链接已断开。
mkosmala '16

10

(除了此处的全面答案之外,这更多是扩展注释。)


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

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

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

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


很好的可能性摘要。+1
love.by.Jesus

9

如果不需要刻度线(例如用于绘制定性插图),则也可以使用以下快速解决方法:

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


1
这似乎去除了刺,但保留了刻度线。知道如何删除刻度线吗?
罗布·扬

2
@Rob:没错,实际上我在想的脚本中使用了不同的解决方案。我更改了答案,现在应该可以了,但总的来说,上面接受的解决方案更好。
nikow 2011年

9

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

只需添加:

import seaborn as sns

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

sns.despine()

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

sns.despine(top=True, right=True, left=False, bottom=False)

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


7

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

import matplotlib as mpl

mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False

如果要删除所有刺:

mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.