我必须调整哪些旋钮来防止这些问题:
- 重叠轴标签
- 带有裁剪轴标签的重叠地块
我使用matplotlib 3.5.1和PGF后端。一些旧版本的解决方案不再工作。
fig, axes = plt.subplots\
(2, 3, constrained_layout=True, subplot_kw=dict(projection="3d"))
#it = np.nditer(axes, flags=["refs_ok","multi_index"])
#for ax in it:
# # Plot the surfaces, add row and column title annotations.
# pass
width = 150 * 0.8 * mm
height = width * 0.65
fig.set_size_inches(width, height)
fig.savefig("something.pgf", dpi=300)
plt.close(fig)
3条答案
按热度按时间zbsbpyhn1#
摆脱约束布局并使用
plt.subplots_adjust(wspace=<value>, hspace=<value>)
对我来说很有效8ulbf1ek2#
虽然紧凑布局和约束布局都可以用于3d投影(mplot3d),但约束布局似乎不理解如何填充3d标记标签,导致标签重叠或修剪。两个布局管理器都调整子图填充和轴大小,给定一个固定的图形大小。两者都不能使图形大小适合内容。要使用紧凑布局来完成此操作,请通过多次迭代从当前图形紧凑bbox中推断所需的图形大小。使用受约束布局管理器时,请将轴紧bbox和填充相加以确定任何多余的空间。紧凑布局可调整子绘图部分(轴尺寸和图形填充),并支持“h_pad”和“w_pad”参数。约束布局可调整轴大小,并支持“wspace”、“hspace”、“w_pad”和“h_pad”参数。紧凑布局将子地块压缩成紧凑组,然后将其集中在可用空间中。受约束的布局将子地块均匀分布在所有可用空间中。不管布局管理器是什么,如果刻度重叠或聚集得太紧,请将刻度定位器切换为“MaxNLocator”,以获得较小的“n”。
根本问题是3d投影刻度标签在绘制完整画布之前是空的。受约束布局管理器执行的“_draw_disabled”绘制不足以触发刻度标签。如果你跟踪axis tight bbox,你会注意到它们直到调用“fig.canvas.draw”之后才包含标签,在此之前,标记标签只是“Text(0,0,'')"。请确保在调整图形大小后包含此调用,然后布局将按预期受到约束。给定一个固定的图形宽度,根据美观性设置高度,或者对带有填充的轴进行求和,以确定可能的最小高度。
vdzxcuhz3#
万一你要将它嵌入到PyQt Gui中,使用mpl工具栏,这个顺序可能会有帮助: