【问题标题】:Matplotlib's mPlot3d cuts out part of the plot's backgroundMatplotlib 的 mPlot3d 切出部分情节背景
【发布时间】:2021-04-10 09:33:07
【问题描述】:

我正在尝试在 .png 中保存 3d 图形,但绘图的白色背景不够大,无法适应 z 轴索引。 .jpg 不会出现同样的问题,因为它会自动用白色填充透明背景。

PNG Generated plot image (其实imgur也会填充背景,但是你可以看到右边的填充,因为它是灰色的)。

我使用的代码是:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

# PLOTTING
fig = plt.figure(figsize=[5.0, 5.0])
ax = Axes3D(fig, auto_add_to_figure=False)
fig.add_axes(ax)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.viridis)
plt.savefig('fig_NablaBsing.png', bbox_inches='tight')

plt.show()

编辑:

经过一些测试,我很确定这是一个错误。 Matplotlib 的figure() 文档说facecolor 属性默认设置为white,但似乎并非如此。

相反,只有当我手动将 facecolor='white' 添加到 figure()savefig() 时,我才能得到正确渲染的图。

【问题讨论】:

  • 我试过你的代码,对我来说它工作得很好。您使用的是哪个版本的 matplotlib?您可以删除 auto_add_to_figure,因为它已被弃用。
  • 我使用的是版本:3.4.1。我删除了 auto_add 但结果是一样的。顺便说一下,我正在 JupyterLab notebook 中执行代码。
  • 是否有可能因为您使用的是自动用白色填充透明背景的图片查看器,所以代码对您来说可以正常工作?在这种情况下,您不会注意到问题,但它仍然存在。

标签: python matplotlib plot mplot3d


【解决方案1】:

我找到了解决方法。 我已将属性添加到 savefig():

facecolor='white'

这似乎修复了 .png 文件的透明度错误。 如果有人知道解决此问题的更好方法,也许是正确的方法而不是解决问题,请将其发布为答案。

编辑:还有另一种方法可以通过在figure() 中设置facecolor='white' 来修复错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    相关资源
    最近更新 更多