Matplotlib中3D曲面图尺寸无法调整及子图使用问题求助
解决3D曲面图尺寸不生效与子图空图问题
问题原因
- 初始代码未将
ax与创建的fig绑定,导致figsize设置完全无效。 - 使用
add_subplot(211)时,211代表2行1列的子图布局,因此会自动生成第二个空的子图。
正确写法一:用plt.subplots一次性创建
直接创建包含3D投影子图的画布,同时指定尺寸:
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm z = arr # 你的数据数组 y = np.arange(len(z)) x = np.arange(len(z[0])) x, y = np.meshgrid(x, y) # 创建画布和3D子图,同时设置尺寸 fig, ax = plt.subplots(figsize=(10, 10), subplot_kw={'projection': '3d'}) ax.plot_surface(x, y, z, cmap=cm.coolwarm) ax.set_xlabel("Bonus to AC") ax.set_ylabel("Current AC") ax.set_zlabel("Reduction in Damage") plt.show()
正确写法二:用figure+add_subplot(111)
如果习惯分开创建画布和子图,使用111指定1行1列的唯一子图,避免空图:
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm z = arr y = np.arange(len(z)) x = np.arange(len(z[0])) x, y = np.meshgrid(x, y) fig = plt.figure(figsize=(10, 10)) # 创建唯一的3D子图 ax = fig.add_subplot(111, projection='3d') ax.plot_surface(x, y, z, cmap=cm.coolwarm) ax.set_xlabel("Bonus to AC") ax.set_ylabel("Current AC") ax.set_zlabel("Reduction in Damage") plt.show()
内容的提问来源于stack exchange,提问作者Alden Spitzer
相关产品推荐
相关产品推荐

