Jupyter Notebook中plt.show()显示空图形<Figure...>问题求助
问题:Jupyter Notebook中3D交互图形无法显示,仅输出<Figure size 800x800 with 0 Axes>
我正在学习CISCO IoT Big Data课程,需在Python内核的Jupyter Notebook中完成实验。严格按照实验步骤操作后仍无法显示图形,仅输出:
return (<Figure size 800x800 with 0 Axes> )
代码如下:
%matplotlib inline import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from ipywidgets import interact def scatter_view(x, y, z, azim, elev): # Init figure and axes fig = plt.figure(figsize=(8, 8)) ax = Axes3D(fig) # Compute scatter plot ax.scatter(x, y, z) ax.set_xlabel('D rate (Mbit/s)', fontsize=16) ax.set_ylabel('U rate (Mbit/s)', fontsize=16) ax.set_zlabel('P rate (1/s)', fontsize=16) ax.azim = azim ax.elev = elev xi = df_rates['download_rate'] yi = df_rates['upload_rate'] zi = df_rates['ping_rate'] interact(lambda azim, elev: scatter_view(xi, yi, zi, azim, elev), azim=(0, 90), elev=(0, 90)) plt.show()
尝试过修改图形尺寸、调整%matplotlib inline的位置,未找到解决办法,恳请告知问题原因。
问题原因及解决方法
核心问题
- 每次调用
scatter_view都会创建新的figure,但interact结合%matplotlib inline时,新创建的图形没有被正确返回和渲染,反而最后plt.show()只显示了初始空的figure(因为interact回调里的fig未关联到当前显示流)。 - 旧版
Axes3D(fig)的初始化方式在新版matplotlib中已不推荐,容易导致画布关联异常。
修改后的代码
%matplotlib inline import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from ipywidgets import interact def scatter_view(x, y, z, azim, elev): # 清除当前画布内容,避免重复叠加 plt.clf() # 获取当前画布并添加3D子图 ax = plt.gcf().add_subplot(projection='3d') # 绘制散点图 ax.scatter(x, y, z) ax.set_xlabel('D rate (Mbit/s)', fontsize=16) ax.set_ylabel('U rate (Mbit/s)', fontsize=16) ax.set_zlabel('P rate (1/s)', fontsize=16) ax.azim = azim ax.elev = elev xi = df_rates['download_rate'] yi = df_rates['upload_rate'] zi = df_rates['ping_rate'] # 直接绑定函数,无需匿名lambda interact(scatter_view, x=xi, y=yi, z=zi, azim=(0, 90), elev=(0, 90))
关键修改说明
- 移除
plt.show():interact会自动处理交互过程中的图形更新,手动调用反而会显示空画布; - 复用当前画布:用
plt.clf()清除内容,plt.gcf()获取当前画布,避免每次创建新fig导致渲染丢失; - 替换轴初始化方式:用
add_subplot(projection='3d')替代Axes3D(fig),符合matplotlib新版规范; - 简化
interact绑定:直接传递scatter_view函数,避免匿名lambda无法返回图形对象的问题。
内容的提问来源于stack exchange,提问作者Bajan Madalin
相关产品推荐
相关产品推荐

