使用脊柱自定义matplotlib中仅一侧的刻度标记

10 投票
2 回答
12201 浏览
提问于 2025-04-17 11:51

我用 matplotlib 画了一个水平条形图,代码如下:

import matplotlib.pyplot as plt
from numpy import *
from scipy import *
bars = arange(5) + 0.1
vals = rand(5)
print bars, vals
plt.figure(figsize=(5,5), dpi=100)
spines = ["bottom"]
ax = plt.subplot(1, 1, 1)
for loc, spine in ax.spines.iteritems():
  if loc not in spines:
    spine.set_color('none')
# don't draw ytick marks
#ax.yaxis.set_tick_params(size=0)
ax.xaxis.set_ticks_position('bottom')
plt.barh(bars, vals, align="center")
plt.savefig("test.png") 

运行后会生成这样的图像:在这里输入图像描述

我只想显示 x 轴,使用 spines(边框)的方法可以做到这一点,但现在右侧的 y 轴上出现了悬挂的刻度线。我该怎么去掉这些呢?我希望左侧的 y 轴刻度线保留,并且让它们朝外(与条形图的方向相反)。我知道可以通过取消注释下面这一行来完全去掉 y 轴的刻度线:

#ax.yaxis.set_tick_params(size=0)

但我只想保留左侧的刻度线。谢谢。

编辑:经过一些尝试,我找到了一个解决方案,虽然我知道这个方法可能不是最好的,所以请告诉我你们的看法。我发现可以这样做:

ax.spines["left"].axis.axes.tick_params(direction="outward") 

来设置刻度线的方向。要去掉右侧 y 轴的刻度线,我使用:

ax.yaxis.set_ticks_position("left")

2 个回答

11

你可以使用:

ax.tick_params(top="off")
ax.tick_params(bottom="off")
ax.tick_params(right="off")
ax.tick_params(left="off")
16

你可以简单地使用:

ax.tick_params(axis='y', direction='out')

这样可以让刻度线按照你想要的方向排列。而:

ax.yaxis.tick_left()

这样做的话,刻度线就不会正确显示了。

撰写回答