更新了MRE子图
- 我不确定原始问题和MRE的有用性。对于大的x和y标签,边距填充似乎进行了适当的调整。
- 该问题可通过子图重现。
- 使用
matplotlib 3.4.2
fig, axes = plt.subplots(ncols=2, nrows=2, figsize=(8, 6))
axes = axes.flatten()
for ax in axes:
ax.set_ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
ax.set_xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()
字符串
的数据
原创
我正在使用matplotlib
绘制一个数据集,其中我有一个相当“高”的xlabel(它是一个用TeX呈现的公式,包含一个分数,因此高度相当于几行文本)。
在任何情况下,公式的底部总是在我画数字的时候被切掉。更改图形大小似乎对此没有帮助,我还没有能够弄清楚如何将x轴“向上”移动以为xlabel腾出空间。类似的东西是一个合理的临时解决方案,但最好是有一种方法可以让matplotlib自动识别标签被切断并相应地调整大小。
这里有一个例子来说明我的意思:
import matplotlib.pyplot as plt
plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$', fontsize=50)
plt.title('Example with matplotlib 3.4.2\nMRE no longer an issue')
plt.show()
型
的
整个ylabel是可见的,但是xlabel在底部被切断。
在这种情况下,这是一个特定于机器的问题,我在OSX 10.6.8和matplotlib 1.0.0上运行它
8条答案
按热度按时间ercv8c1e1#
用途:
字符串
为标签腾出空间,其中
plt.gcf()
表示获取当前图形。也可以使用plt.gca()
,其获得当前Axes
。编辑:
既然我给出了答案,
matplotlib
就增加了**plt.tight_layout()
**函数。See matplotlib Tutorials: Tight Layout Guide的
所以我建议使用它:
型
的数据
3okqufwl2#
如果你想把它存储到一个文件中,你可以使用
bbox_inches="tight"
参数来解决它:字符串
zaq34kh63#
一个简单的选项是配置matplotlib来自动调整图的大小。它完美地为我工作,我不知道为什么它不被默认激活。
方法一
在matplotlibrc文件中设置这个
字符串
有关自定义matplotlibrc文件的更多信息,请参见此处:http://matplotlib.org/users/customizing.html
方法二
像这样在运行时更新rcParams
型
使用这种方法的优点是,您的代码将在不同配置的机器上生成相同的图形。
mkh04yzy4#
plt.autoscale()
为我工作。wb1gzix05#
您还可以在
$HOME/.matplotlib/matplotlib_rc
中将自定义填充设置为默认值,如下所示。在下面的示例中,我修改了底部和左侧的开箱即用填充:字符串
cnh2zyt36#
还有一种方法是使用OOP接口,将
tight_layout
直接应用于图形:字符串
https://matplotlib.org/stable/api/figure_api.html
zynd9foi7#
由于某种原因,sharex被设置为True,所以我把它调回False,它工作得很好。
字符串
qmelpv7a8#
您需要使用sizzor来修改轴范围:
字符串