Matplotlib中gca()传projection参数报错的解决方案对比求助
Matplotlib 3.4+ 解决
gca(projection='3d')报错并实现预期3D绘图 问题说明
Matplotlib 3.4版本之后,原代码fig.gca(projection = '3d')会触发以下报错:
TypeError: FigureBase.gca() got an unexpected keyword argument 'projection'
尝试了三种替代写法,但效果均不符合预期:
axes1 = fig.add_axes(Axes3D(fig))(实际效果与预期差距明显)axes1 = fig.gca(projection=Axes3D.name)axes1 = fig.add_subplot(projection='3d')
预期效果:
方案1实际效果:
正确实现方式
方法1:用add_subplot创建占满画布的3D轴
这是最省心的写法,和原代码效果完全一致:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() # 111代表1行1列的第1个子图,默认占满整个画布 axes1 = fig.add_subplot(111, projection='3d') # 后续正常编写绘图代码即可,比如 axes1.plot3D(x, y, z) plt.show()
方法2:适配类似gca的使用逻辑
先添加3D子图,再获取当前坐标轴:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() fig.add_subplot(projection='3d') axes1 = plt.gca()
方案1效果异常的原因及修正
fig.add_axes(Axes3D(fig))未指定坐标轴的位置和大小,默认仅占用画布一小块区域。如果一定要使用该方法,需手动设置占满整个画布:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() # [0,0,1,1]代表从画布左下角(0,0)开始,宽高均占满整个画布 axes1 = fig.add_axes([0, 0, 1, 1], projection='3d')
内容的提问来源于stack exchange,提问作者marx
相关产品推荐
相关产品推荐

