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

而不是默认的“盒装”轴样式,我想只有左轴和底部轴,即:

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

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

173292 次浏览

[编辑]matplotlib现在(2013-10)版本1.3.0,其中包括这个

该功能实际上是刚刚添加的,您需要Subversion版本来实现它。你可以看到示例代码在这里

我只是更新说,现在网上有一个更好的例子。虽然还需要Subversion版本,但还没有发布。

Matplotlib 0.99.0 RC1刚刚发布,它包含了这个功能。

如果你不需要刻度之类的(例如绘制定性插图),你也可以使用这个快速的解决方案:

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

另外,这

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;由启发的解决方案)。

这是官方网站在这里建议的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()

enter image description here

(除了这里的全面回答之外,这更像是一个扩展的评论。)


注意,我们可以分别隐藏这三个元素:

  • 隐藏边界(又名“spine”):ax.set_frame_on(False)ax.spines['top'].set_visible(False)

  • 隐藏蜱:ax.tick_params(top=False)

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

Library Seaborn内置了.despine()函数。

添加:

import seaborn as sns

现在创建图形。最后加上:

sns.despine()

如果你看一下函数的一些默认参数值,它会删除顶部和右侧的spine,并保留底部和左侧的spine:

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

查看进一步的文档: https://seaborn.pydata.org/generated/seaborn.despine.html < / p >

如果你需要从所有的图中删除它,你可以在样式设置(样式表或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

另一种非全局方法是使用matplotlib.pyplot.rc_context上下文管理器,如下所示:

with plt.rc_context({
"axes.spines.right": False,
"axes.spines.top": False,
}):
fig, ax = plt.subplots()
...

如果你想经常应用它,你也可以创建一个在这里所描述的样式表,并使用这些设置:

axes.spines.left:   True
axes.spines.bottom: True
axes.spines.top:    False
axes.spines.right:  False

虽然接受的答案是很好的,如果你想做的只是关闭轴线,我建议熟悉.set()函数,因为你可以传递额外的kwargs控制线的风格,粗细等,使你的代码更加灵活和可重用。它还减少了您需要学习的matplotlib函数的数量。

Op可以这样做:

ax.spines.top.set(visible=False)
ax.spines.right.set(visible=False)

但你也可以很容易地做这样的事情:

ax.spines.right.set(color='red', linestyle='--', linewidth=2, position=['data',2])
ax.spines.top.set(color='red', linestyle='--', linewidth=2, position=['data',5])

Using spine .set() to do things

参见文档在这里