簡體   English   中英

Matplotlib:在圖右側打勾時,隱藏特定的y勾號標簽不起作用

[英]Matplotlib: Hiding specific y-tick labels not working when ticks on the right side of plot

我正在創建一個具有2列和許多行的子圖圖。 我正在使用以下代碼將我的刻度標簽和軸標簽移動到右側的右側列(但仍在兩側保留刻度線):

fig, ax = plt.subplots(4, 2, sharex=False, sharey=False)
fig.subplots_adjust(wspace=0, hspace=0)
for a in ax[:,1]:
  a.yaxis.tick_right()
  a.yaxis.set_ticks_position('both')
  a.yaxis.set_label_position('right')

然后,因為子圖緊密靠近(這就是我想要的,所以我不想在圖之間使用任何填充),所以圖之間的頂部和底部y-tick標簽重疊。 我嘗試使用此處描述的方法解決此問題 (此操作僅選擇查看間隔內的刻度線-檢查鏈接以獲取更多信息):

import matplotlib.transforms as mtransforms 
def get_major_ticks_within_view_interval(axis):
    interval = axis.get_view_interval()
    ticks_in_view_interval = []
    for tick, loc in zip(axis.get_major_ticks(), axis.get_major_locator()()):
        if mtransforms.interval_contains(interval, loc):
            ticks_in_view_interval.append(tick)
    return ticks_in_view_interval 

for i,a in enumerate(ax.ravel()):
    nplots = len(ax.ravel())
    yticks = get_major_ticks_within_view_interval(a.yaxis)
    if i != 0 and i != 1:
        yticks[-1].label.set_visible(False)
    if i != nplots-2 and i != nplots-1:
        yticks[0].label.set_visible(False)

這似乎對左列很好用,但是在右列中,重疊的刻度仍然可見。 有誰知道為什么會這樣,以及如何解決? 我似乎無法弄清楚。

我終於找到了解決方案,所以我想如果有人遇到相同的問題(或者如果我忘記了所做的事情,哈哈),我也會把它也放在這里。 我發現發生在以下頁面上的時間: http : //matplotlib.org/1.3.1/users/artists.html

我沒有意識到的是,y軸左右兩邊的標簽可以相互獨立地修改。 當使用yticks[0].label.set_visible(False)label僅引用左側標簽,因此右側標簽保持不變。 為了解決這個問題,我更換了

yticks[0].label.set_visible(False)

通過

yticks[0].label1.set_visible(False)
yticks[0].label2.set_visible(False)

(與yticks[-1]相同)。 現在它就像一種魅力!

通常,我發現可以使用以下方法解決matplotlib中重疊的問題

plt.tight_layout()

你有嘗試過嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM