การซ่อนข้อความของแกนในแผนการของ matplotlib


370

ฉันพยายามพล็อตร่างโดยไม่มีเครื่องหมายหรือตัวเลขที่แกนใดอันหนึ่ง (ฉันใช้ขวานในความหมายดั้งเดิมไม่ใช่การตั้งชื่อ matplotlib!) ปัญหาที่ฉันเจอคือที่ matplotlib ปรับ ticklabels x (y) โดยการลบค่า N จากนั้นเพิ่ม N ที่ส่วนท้ายของแกน

สิ่งนี้อาจคลุมเครือ แต่ตัวอย่างง่าย ๆ ต่อไปนี้เน้นถึงปัญหาโดยที่ '6.18' เป็นค่าที่ไม่เหมาะสมของ N:

import matplotlib.pyplot as plt
import random
prefix = 6.18

rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')

frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
    xlabel_i.set_visible(False)
    xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
    xlabel_i.set_fontsize(0.0)
    xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
    tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
    tick.set_visible(False)

plt.show()

สามสิ่งที่ฉันอยากรู้คือ:

  1. วิธีปิดพฤติกรรมนี้ในตอนแรก (แม้ว่าโดยส่วนใหญ่แล้วจะเป็นประโยชน์ แต่ก็ไม่เสมอไป!) ฉันเคยตรวจสอบmatplotlib.axis.XAxisแล้วและไม่สามารถหาสิ่งที่เหมาะสมได้

  2. ฉันจะทำให้ N หายไปได้อย่างไร (เช่นX.set_visible(False))

  3. มีวิธีที่ดีกว่าที่จะทำข้างต้นหรือไม่ พล็อตสุดท้ายของฉันน่าจะเป็น 4x4 ย่อยในรูปถ้ามันเกี่ยวข้องกัน


ฉันมีข้อสงสัยเล็กน้อยหากคำตอบใด ๆ ที่นี่ตอบคำถามได้จริง สำหรับฉันดูเหมือนว่าคำถามถามว่าจะกำจัดออฟเซ็ตได้อย่างไร แต่คำตอบทั้งหมดแสดงรูปแบบต่างๆวิธีการกำจัดของทุก ticklabels หากคำถามได้ถูกแทนที่โดยคำตอบอาจมีใครควรแก้ไขคำถามเพื่อถามว่าคำตอบนั้นมีวิธีแก้ปัญหาอย่างไร?
ImportanceOfBeingErnest

คำตอบ:


471

แทนที่จะซ่อนแต่ละองค์ประกอบคุณสามารถซ่อนทั้งแกนได้:

frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)

หรือคุณสามารถตั้งค่าเห็บเป็นรายการว่าง:

frame1.axes.get_xaxis().set_ticks([])
frame1.axes.get_yaxis().set_ticks([])

ในตัวเลือกที่สองนี้คุณยังสามารถใช้plt.xlabel()และplt.ylabel()เพื่อเพิ่มป้ายกำกับให้กับแกน


2
เฮ้ Ofri - เยี่ยมมากขอบคุณ แต่ตอนนี้ (แค่อึดอัดใจ) จะเกิดอะไรขึ้นถ้าฉันต้องการเพิ่ม xlabel () นอกเหนือจากการวางวิดเจ็ตข้อความด้วยตนเอง
เดฟ

5
คุณจะขยายตัวอย่างนี้เป็น 3d ได้อย่างไร ax = plt.gca (projection = '3d'), ax.axes.get_zaxis (). set_visible (เท็จ) ให้'Axes3DSubplot' object has no attribute 'get_zaxis'
user989762

13
คำตอบนี้ไม่อนุญาตให้แสดงเส้นกริด คำตอบโดย @saullo castro ทำ ...
evan54

ปัญหาคือว่าเมื่อ x_axis ถูกตั้งค่าให้มองไม่เห็น dsappears ตาราง :( แก้ไข: เพียงแค่เห็นคำตอบ @Saullo คาสโตรซึ่งได้รับการแก้ไขปัญหาที่เกิดขึ้น.
Shailen

1
@ user989762 ในกรณีของคุณวิธีนี้ใช้ไม่ได้get_xaxis().set_visible(False)เลย ฉันคิดว่า matplotlib ในกรณีนี้เริ่มต้นพารามิเตอร์บางตัวราวกับว่าพล็อตเป็น 2D ax.set_zticks([])จะทำในสิ่งที่คุณต้องการ
kon Psych

222

หากคุณต้องการซ่อนเฉพาะข้อความแกนที่รักษาเส้นกริด:

frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])

การทำset_visible(False)หรือset_ticks([])จะซ่อนเส้นกริด


4
จะเป็นการลบป้ายกำกับสำหรับแผนการย่อยทั้งหมดที่ใช้แกนนั้น: /
endolith

136

หากคุณเป็นเหมือนฉันและไม่ได้เรียกแกนคืนมาเสมอaxเมื่อทำการวางแผนรูปแล้ววิธีแก้ปัญหาอย่างง่ายก็คือการทำ

plt.xticks([])
plt.yticks([])

56

ค่อนข้างเก่า แต่ดูเหมือนว่าจะเป็นวิธีที่เร็วกว่าโดยใช้ matplotlib เวอร์ชันล่าสุด:

กำหนดตัวจัดรูปแบบหลักสำหรับแกน x

ax.xaxis.set_major_formatter(plt.NullFormatter())

1
จะทำอย่างไรถ้าคุณต้องการทำเพียงแค่เห็บเดียว?
tommy.carstensen

5
ใช่สิ่งนี้มีประโยชน์ในการซ่อนป้ายกำกับเท่านั้นเนื่องจาก. set_xticks ([]) จะลบเครื่องหมายติ๊กด้วยตนเอง
zbyszek

49

จริง ๆ แล้วฉันไม่สามารถแสดงภาพที่ไม่มีเส้นขอบหรือข้อมูลแกนตามตัวอย่างโค้ดใด ๆ ที่นี่ (แม้แต่ภาพที่ได้รับคำตอบ) หลังจากขุดเอกสาร API บางอย่างแล้วฉันได้ใช้รหัสนี้เพื่อแสดงภาพของฉัน

plt.axis('off')
plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0)

ฉันใช้การtick_paramsเรียกเพื่อปิดข้อมูลพิเศษใด ๆ ที่อาจแสดงผลและฉันมีกราฟที่สมบูรณ์แบบในไฟล์เอาต์พุตของฉัน


1
เมื่อแบ่งใช้แกนโซลูชันที่อ้างอิง set_ticklabels จะเผยแพร่ตามแกนที่ใช้ร่วมกัน วิธีแก้ปัญหานี้ที่อิงกับ tick_params ก็ใช้ได้ดีสำหรับฉัน
Christian O'Reilly

39

ฉันใช้รหัสสีนี้เพื่อทำให้กระบวนการง่ายขึ้น

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถควบคุมรูปโดยใช้คำสั่งเหล่านี้ได้อย่างสมบูรณ์เพื่อให้คำตอบที่ฉันได้เพิ่มเข้าไปยังควบคุมเส้นโค้ง:

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# X AXIS -BORDER
ax.spines['bottom'].set_visible(False)
# BLUE
ax.set_xticklabels([])
# RED
ax.set_xticks([])
# RED AND BLUE TOGETHER
ax.axes.get_xaxis().set_visible(False)

# Y AXIS -BORDER
ax.spines['left'].set_visible(False)
# YELLOW
ax.set_yticklabels([])
# GREEN
ax.set_yticks([])
# YELLOW AND GREEN TOGHETHER
ax.axes.get_yaxis().set_visible(False)

ax.set_xticklabels([])และax.set_xticks([])ไม่ทำงานสำหรับฉัน แต่ax.axes.get_xaxis().set_visible(False)ทำ
Homero Esmeraldo

2
นี่ควรเป็นคำตอบที่ยอมรับ
Jason S

6

เมื่อใช้เชิงวัตถุ API ที่Axesวัตถุมีสองวิธีที่มีประโยชน์ในการลบข้อความที่แกนและset_xticklabels()set_xticks()

สมมติว่าคุณสร้างพล็อตโดยใช้

fig, ax = plt.subplots(1)
ax.plot(x, y)

หากคุณต้องการลบป้ายกำกับขีดคุณสามารถใช้

ax.set_xticklabels([])

หรือเพื่อลบเห็บสมบูรณ์คุณสามารถใช้

ax.set_xticks([])

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


2

เคล็ดลับอย่างหนึ่งคือการตั้งค่าสีของป้ายชื่อเห็บเป็นสีขาวเพื่อซ่อนมัน!

plt.xticks(color='w')
plt.yticks(color='w')
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.