簡體   English   中英

Matplotlib:將文本與軸刻度對齊

[英]Matplotlib: Align text with axis ticks

我想在繪圖的 y 軸旁邊顯示自定義文本,如這個最小示例所示:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.text(-0.05, 0.5, '$x$')
plt.show()

水平 alignment 0.05是我通過反復試驗得出的。 不幸的是, 0.05僅適用於 plot window 中的一個大小。

對於默認的 window 大小,文本在我想要的位置:

在此處輸入圖像描述

但是,一旦我將 plot window 放大,我的文字就會迷失在無人區:

在此處輸入圖像描述

我嘗試ax.text(-ax.yaxis.get_tick_padding, 0.5, '$x$') ,但填充似乎是以不同的單位測量的。

對於每個 window 大小,如何確保我的文本與 y 軸的距離相同?

您可以使用ax.annotate而不是ax.text因為它允許更多的自由。 具體來說,它允許在某個坐標系中注釋一個點,文本在不同坐標中偏移到該位置。

以下將在yaxis_transform給出的坐標系中的位置(0, 0.5) yaxis_transform (0, 0.5)處創建注釋,即(axes coordinates, data coordinates) 然后,文本本身從該位置偏移-5個點。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.annotate('$x$', xy=(0, 0.5), xycoords=ax.get_yaxis_transform(),
                   xytext=(-5,0), textcoords="offset points", ha="right", va="center")

plt.show()

在此輸入圖像描述

請注意, -5也只是估計值,您可能希望自己再次找到最佳值。 但是,只要標簽的填充和字體大小沒有改變,這樣做就會保持不變。

當刻度長度或填充已更改時,您可以通過查詢其中一個刻度來找出確切的偏移量。 刻度線有一個“填充”(介於 label 和刻度線之間)和一個“填充”(刻度線的長度),均以“點”為單位。 在默認設置中,兩者都是3.5 ,填充為7

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

tick = ax.yaxis.get_major_ticks()[-1]
padding = tick.get_pad() + tick.get_tick_padding()
ax.annotate('$half$', xy=(0, 0.5), xycoords=ax.get_yaxis_transform(),
                   xytext=(-padding,0), textcoords="offset points", ha="right", va="center")

plt.show()

暫無
暫無

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

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