gpt4 book ai didi

python - 在 matplotlib 中移动和调整图例框的大小

转载 作者:太空狗 更新时间:2023-10-29 19:33:41 25 4
gpt4 key购买 nike

我使用 Matplotlib 创建绘图,将其保存为 SVG,使用 Inkscape 导出为 .pdf + .pdf_tex,并将 .pdf_tex 文件包含在 LaTeX 文档中。

这意味着我可以在标题、图例等中输入 LaTeX 命令,给出这样的图像 plot

当我在我的 LaTeX 文档中使用它时,它会像这样呈现。请注意,轴上数字的字体发生了变化,图例中的 LaTeX 代码已编译:

plot rendered using LaTeX

绘图代码(此处未显示如何导出为 SVG,但可以根据要求显示):

import numpy as np
x = np.linspace(0,1,100)
y = x**2

import matplotlib.pyplot as plt
plt.plot(x, y, label = '{\\footnotesize \$y = x^2\$}')
plt.legend(loc = 'best')
plt.show()

问题是,如您所见,图例周围框的对齐方式和大小是错误的。这是因为图片通过Inkscape + pdflatex 时标签的文字大小发生了变化(因为\footnotesize等消失了,字体大小发生了变化)。

我发现我可以选择标签的位置

plt.label(loc = 'upper right')

或者如果我想要更多控制,我可以使用

plt.label(bbox_to_anchor = [0.5, 0.2])

但我还没有找到使标签周围的框变小的方法。这可能吗?

使盒子变小的另一种方法是使用类似的方法删除盒子的轮廓

legend = plt.legend()
legend.get_frame().set_edgecolor('1.0')

然后将标签移动到我想要的位置。在那种情况下,我希望能够通过首先让 python/matplotlib 使用

放置标签来设置标签的位置
plt.label(loc = 'upper right')

然后例如将它向右移动一点。这可能吗?我尝试过使用 get_bbox_to_anchor()set_bbox_to_anchor(),但似乎无法正常工作。

最佳答案

您可以通过绘制图例自动放置后移动图例,然后获取 bbox 位置。这是一个例子:

import matplotlib.pyplot as plt
import numpy as np

# Plot data
x = np.linspace(0,1,100)
y = x**2
fig = plt.figure()
ax = fig.add_subplot(221) #small subplot to show how the legend has moved.

# Create legend
plt.plot(x, y, label = '{\\footnotesize \$y = x^2\$}')
leg = plt.legend( loc = 'upper right')

plt.draw() # Draw the figure so you can find the positon of the legend.

# Get the bounding box of the original legend
bb = leg.get_bbox_to_anchor().inverse_transformed(ax.transAxes)

# Change to location of the legend.
xOffset = 1.5
bb.x0 += xOffset
bb.x1 += xOffset
leg.set_bbox_to_anchor(bb, transform = ax.transAxes)


# Update the plot
plt.show()

legend moved after first drawing

关于python - 在 matplotlib 中移动和调整图例框的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23238041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com