matplotlib文本bbox的侧面特定填充

时间:2016-02-07 03:45:43

标签: python matplotlib latex

在matplotlib中添加文本时,是否可以在bbox的特定一侧指定填充?我正在添加一个LaTex表作为文本,由于某种原因,该表自然未对齐,没有填充规范。我想在bbox的顶部添加填充内容。

不幸的是,似乎没有一个选项可以将填充添加到bbox的特定端。这可能吗?

以下是一个例子:

import matplotlib
matplotlib.rc('text',usetex=True)
import matplotlib.pyplot as plt
import numpy as np

text = '\\begin{tabular}{|c|c|}\\hline 1 & 2 \\\\ \\hline 3 & 4 \\\\ \\hline \\end{tabular}'

plt.imshow(np.zeros((10,10)), cmap=plt.cm.gray)
plt.text( 4.5,
          4.5,
          text,
          fontsize=24,
          bbox=dict(fc='w',boxstyle='square,pad=0.5'), va='center', ha='center')
plt.axis('off')
plt.show()

1 个答案:

答案 0 :(得分:0)

我找到了一个基于the answer suggested in this post的解决方法。还可以理解更容易的解决方案。我还应该说,只有在我设置import matplotlib matplotlib.rc('text',usetex=True) import matplotlib.pyplot as plt from matplotlib.patches import Rectangle import numpy as np text = '\\begin{tabular}{|c|c|}\\hline1&2\\\\\\hline3&4\\\\\\hline\\end{tabular}' fig, ax = plt.subplots(1) img = ax.imshow(np.zeros((10,10)), cmap=plt.cm.gray) txt = ax.text( 4.5, 4.5, text, fontsize=24, ha='center', va='center', bbox=dict(alpha=0)) fig.canvas.draw() bbox = txt.get_bbox_patch() xmin = bbox.get_window_extent().xmin xmax = bbox.get_window_extent().xmax ymin = bbox.get_window_extent().ymin ymax = bbox.get_window_extent().ymax xmin, ymin = fig.transFigure.inverted().transform((xmin, ymin)) xmax, ymax = fig.transFigure.inverted().transform((xmax, ymax)) dx = xmax-xmin dy = ymax-ymin # The bounding box vals can be tweaked manually here. rect = Rectangle((xmin-0.02,ymin-0.01), dx+0.04, dy+0.05, fc='w', transform=fig.transFigure) ax.add_patch(rect) fig.canvas.draw() ax.axis('off') plt.savefig('ok.png',bbox_inches='tight') 时才会发生垂直错位。

以下是上述的修改版本:

{{1}}

这会产生: