настройка только одной стороны меток в matplotlib с использованием шипов

У меня есть горизонтальная полоса 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, которая работала с использованием шипов, но теперь она отображает эти висячие деления для правой оси Y. Как я могу удалить их? Я хотел бы оставить метки ytickmarks на левой стороне графика и сделать их лицевой стороной наружу (направление, противоположное столбцам). Я знаю, что могу полностью удалить галочки, раскомментировав строку:

#ax.yaxis.set_tick_params(size=0)

но я хочу оставить отметки ytick только с левой стороны. благодарю вас.

EDIT: я нашел решение после некоторых проб и ошибок, хотя я уверен, что мое решение, вероятно, не лучший способ сделать это, поэтому, пожалуйста, дайте мне знать, что вы думаете по-прежнему. я обнаружил, что я могу сделать:

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

чтобы задать направление деления. чтобы избавиться от правильных галочек по оси Y, я использую:

ax.yaxis.set_ticks_position("left")

person Community    schedule 29.01.2012    source источник
comment
Я написал ответ о том, как сделать что-то подобное для другого вопроса: stackoverflow.com/a/62498798/6135182 (не хотя с использованием шипов, так что это не прямой ответ на этот вопрос, но может быть полезно для некоторых людей...)   -  person Zaus    schedule 21.06.2020


Ответы (2)


вы можете просто использовать:

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

это будет ориентировать галочки, как вы хотите. А также:

ax.yaxis.tick_left()

это не будет строить правильные тики

person joaquin    schedule 29.01.2012

Вы можете использовать:

ax.tick_params(top="off")
ax.tick_params(bottom="off")
ax.tick_params(right="off")
ax.tick_params(left="off")
person TMoover    schedule 09.06.2014