ปรับแต่งเครื่องหมายขีดเพียงด้านเดียวใน 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 ซึ่งทำงานโดยใช้สัน แต่ตอนนี้มันพล็อตเครื่องหมายถูกที่แขวนไว้สำหรับแกนขวามือ ฉันจะลบสิ่งเหล่านี้ได้อย่างไร? ฉันอยากจะเก็บเครื่องหมาย ytickmarks ไว้ที่ด้านซ้ายมือของโครงเรื่องและหันหน้าออก (ทิศทางตรงข้ามกับแท่ง) ฉันรู้ว่าฉันสามารถลบ ytickmarks ทั้งหมดได้โดยยกเลิกการใส่เครื่องหมายบรรทัด:

#ax.yaxis.set_tick_params(size=0)

แต่ฉันต้องการที่จะเก็บเครื่องหมาย ytick ไว้ที่ด้านซ้ายมือเท่านั้น ขอบคุณ.

แก้ไข: ฉันประสบความสำเร็จในการแก้ปัญหาหลังจากการลองผิดลองถูกมาบ้าง แต่ฉันมั่นใจว่าวิธีแก้ปัญหาของฉันอาจไม่ใช่วิธีที่ดีที่สุด ดังนั้นโปรดแจ้งให้เราทราบว่าคุณคิดอย่างไร ฉันพบว่าฉันสามารถทำได้:

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