簡體   English   中英

matplotlib圖例標簽與LaTeX數學的垂直對齊

[英]Vertical alignment of matplotlib legend labels with LaTeX math

將具有下標的標簽與沒有它們的標簽混合時,它們不會在圖例中垂直對齊。 由於matplotlib在內部根據打印字符確定邊界框,因此使用vphantom字符無法對齊這些圖例標簽,我也沒有運氣改變標簽與set_va的垂直對齊方式。

下面是一個MWE,它說明了我試圖解決的問題。 我希望標簽盡可能與文本基線對齊,否則與文本頂部對齊。

import numpy as np
import matplotlib as mpl
mpl.rcParams['text.usetex'] = True
import matplotlib.pyplot as plt

x = np.arange(10)
plt.plot(x, np.random.uniform(size=(10,)), c='red', label=r'test')
plt.scatter(x, np.random.uniform(size=(10,)), c='blue', label=r'test${}_{xy}$')
plt.legend(ncol=2)                                                                          
plt.show()

mwe圖像

text.latex.preview參數設置為True

import numpy as np
import matplotlib as mpl
mpl.rcParams['text.usetex'] = True
mpl.rcParams['text.latex.preview'] = True
import matplotlib.pyplot as plt

x = np.arange(10)
plt.plot(x, np.random.uniform(size=(10,)), c='red', label=r'test')
plt.scatter(x, np.random.uniform(size=(10,)), c='blue', label=r'test${}_{xy}$')
plt.legend(ncol=2)                                                      

plt.show()

具有基線對齊標簽的圖像

有關preview參數的效果,請參閱此示例

您可以在Matplotlib圖例中查看文本對齊方式

或者您可以向下移動第二個圖例文字,

h_legend = plt.legend(ncol=2)
y_shift = -2.5
h_legend.texts[1].set_position((0, y_shift))

您可以使用以下內容基於圖例窗口的范圍來調整移位距離:

h_legend = plt.legend(ncol=2)    
renderer = plt.gcf().canvas.get_renderer()
y_shift = -0.2*h_legend.texts[0].get_window_extent(renderer).height
h_legend.texts[1].set_position((0, y_shift))

這會將第二個文本移動整個圖例窗口高度的20%。

暫無
暫無

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

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