簡體   English   中英

Matplotlib:添加自定義刻度標簽並刪除y軸上的自定義刻度

[英]Matplotlib: add custom tick label and remove custom tick on y-axis

我想刪除一個刻度線及其標簽,而是在沒有刻度線本身的其他(但關閉)位置添加一個新的刻度線標簽。 我不確定該怎么做。 舉一個例子。

import matplotlib.pyplot as plt
def main():
    fig = plt.figure()
    x = [1,2,3,4,5]
    y = x
    ax = fig.add_subplot(1,1,1)
    y_ticks = ax.yaxis.get_major_ticks()
    y_ticks[-1].label.set_visible(False)
    ax.set_yticks([3.7], minor=True)
    ax.set_yticklabels(["100"], minor=True)
    ax.plot(x,y)
    plt.show()
if __name__ == '__main__':
    main()

我剩下的是刪除位於y = 3.5,3.7的刻度線。

另外,如您所見,我訪問了y_ticks [-1]以將其標簽設置為不可見。 這是任意選擇的,如果有人可以解釋為什么y_ticks [-1]選擇位於y = 3.5的刻度,我將不勝感激。

謝謝

在此處輸入圖片說明

編輯:

如兩個答案中所述,我將代碼更改為:

import matplotlib.pyplot as plt

def main():
    fig = plt.figure()
    x = [1,2,3,4,5]
    y = x
    ax = fig.add_subplot(1,1,1)
    ax.plot(x,y)
    ax.set_yticks([3.7], minor=True)
    ax.set_yticklabels(["100"], minor=True)
    y_ticks = ax.yaxis.get_major_ticks()
    y_ticks[5].set_visible(False)
    y_ticks[6].label.set_visible(False)
    plt.show()
if __name__ == '__main__':
    main()

這產生了下面的圖,您可以看到y_ticks[5]指向位於y=3.5的刻度線, y_ticks[6]指向位於y=4.0的刻度線-它跳過了y=3.7的刻度線。 那么我如何才能訪問它並僅刪除刻度線? 這兩個建議僅說明了如何同時刪除刻度線和標簽或僅刪除標簽(不帶刻度線),我正在尋找刪除刻度線並保留標簽的方法。

在此處輸入圖片說明

嘗試使用y_ticks[-1].set_visible(False)代替y_ticks[-1].label.set_visible(False) 它使標簽和刻度標記都不可見。

編輯:

您可以使用ax.yaxis.get_minor_ticks()3,7處訪問小刻度線,如以下代碼所示:

import matplotlib.pyplot as plt

fig = plt.figure()
x = [1,2,3,4,5]
y = x
ax = fig.add_subplot(1,1,1)
ax.set_yticks([3.7], minor=True)
ax.set_yticklabels(["100"], minor=True)
ax.plot(x,y)

y_ticks = ax.yaxis.get_major_ticks()
y_ticks[5].set_visible(False)
y_minor_ticks = ax.yaxis.get_minor_ticks()
y_minor_ticks[0].label.set_visible(False)

plt.show()

如果您只希望100附近的刻度消失,並且想要保留標簽,請使用:

ax.yaxis.get_minorticklines()[0].set_visible(False)

代替 :

y_minor_ticks = ax.yaxis.get_minor_ticks()
y_minor_ticks[0].label.set_visible(False)

matplotlib.axis 文檔中介紹了所有允許訪問不同刻度部分的功能。

什么情況是:你得到y_ticks的列表中,您已經創建了一個軸 ,但你之前繪制任何東西。 因此,matplotlib設置了一個在兩個軸上都帶有六個刻度的軸(從0.0到1.0),並提供了刻度列表。

然后,在繪制時,將添加更多的刻度,並使用新標簽更新列表中的刻度。 y_ticks []中的最后一項現在位於Y軸的中間。

解決方案:首先繪制, 然后 y_ticks = ax.yaxis.get_major_ticks()

好,找到答案了。 y=3.7處添加的y刻度添加到短軸而不是長軸。 因此我通過ax.tick_params(axis='y', which='minor', length=0)訪問它。 但是,這將根據tick_params設置所有次要滴答tick_params

import matplotlib.pyplot as plt

def main():
    fig = plt.figure()
    x = [1,2,3,4,5]
    y = x
    ax = fig.add_subplot(1,1,1)
    ax.plot(x,y)
    ax.set_yticks([3.7], minor=True)
    ax.set_yticklabels(["100"], minor=True)
    y_ticks_major = ax.yaxis.get_major_ticks()
    y_ticks_major[5].set_visible(False)
    ax.tick_params(axis='y', which='minor', length=0)
    plt.show()
if __name__ == '__main__':
    main()

謝謝您的幫助

暫無
暫無

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

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