matplotlib 从VSCode终端运行时,图为空白图像,从jupyter运行

x8diyxa7  于 2023-03-19  发布在  Vscode
关注(0)|答案(1)|浏览(282)

我需要显示一个点云,我正在使用matplotlib图与Axes3D和散射。
这是玩具代码:

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

xs = np.arange(10)
ys = np.arange(10)
zs = np.arange(10)

fig = plt.figure()
ax = Axes3D(fig)

ax.scatter(xs, ys, zs, color='green')
    
# setting title and labels
ax.set_title("3D plot")
ax.set_xlabel('x-axis')
ax.set_ylabel('y-axis')
ax.set_zlabel('z-axis')
ax.autoscale()
# displaying the plot
#plt.savefig("test")
plt.show()
#fig.savefig("test.png")

如果由终端运行,则此相同代码生成空图像,如果在jupyter单元格expexted result, obtained in jupyter中运行,则此代码生成空图像(如预期)
编辑:我试着运行韦恩发布的解决方案,得到了这个:https://i.stack.imgur.com/8jPM4.png从VSCode终端运行程序时,在绘图窗口中打开

ki1q1bka

ki1q1bka1#

尝试以下代码变体:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
 
xs = np.arange(10)
ys = np.arange(10)
zs = np.arange(10)

# plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xs, ys, zs, color='green')
ax.set_title("3D plot")
ax.set_xlabel('x-axis')
ax.set_ylabel('y-axis')
ax.set_zlabel('z-axis')
#ax.view_init(50, 185)
plt.show()

当你进入here并点击“launch binder”时,我改编自可用笔记本下列出的第一个笔记本中的第一个情节。(我也在下一段的最后一句链接到笔记本的静态版本。)
重要的是,它可以在Spyder会话中工作,从这里在线启动,我看到您的代码无法使绘图显示在“绘图选项卡”中。我认为这是因为它使用了旧代码方法,并且我的评论使我相信使用projection='3d'是当前更常用的方法。例如here,建议使用Axes3D(fig)来解决Axes3D(fig)的弃用问题。(当我在Jupyter中运行您的代码时,以及当我在从here启动的会话中将您的代码作为脚本在终端中运行时,出现了一个弃用警告。)如上所述,我基于here建议的示例代码(我从Yan Holtz's Python Graph Gallery中获得)也可以在Spyder和Jupyter中运行,没有任何弃用警告。
我建议的代码变体也可以在Jupyter中运行,没有任何反对警告。
为什么在使用Axes3D(fig)的时候,Spyder的“Plots”选项卡中没有显示任何图形,并且没有显示任何错误或弃用警告,这让我很难理解。但我怀疑这就像你报告的那样。某种指示器会很好。

相关问题