![](/img/trans.png)
[英]Matplotlib align ticks of secondary y axis to ticks of primary y axis
[英]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.