混合 2D 和 3D 子图时,我无法去除过多的空白。对于纯 3D 子图,我可以调整正在绘制的区域fig.subplots_adjust()以去除空白,请参见此处。
但是,如果此 3D 图像位于 2D 子图中,则相同的技巧将不起作用。我创建了如下所示的混合子图:
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import axes3d
fig,axes = plt.subplots(2,2)
ax = axes.flat
for a in range(3):
ax[a].plot(range(10),range(10))
ax[3].remove()
ax[3] = fig.add_subplot(224,projection='3d')
X, Y, Z = axes3d.get_test_data(0.03)
ax[3].plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.8,cmap=cm.coolwarm)
ax[3].set_xticklabels('')
ax[3].set_yticklabels('')
ax[3].set_zticklabels('')
fig.subplots_adjust(hspace=0,wspace=0)
Run Code Online (Sandbox Code Playgroud)
现在的伎俩,例如。fig.subplots_adjust(left=-0.01)将作用于 2D 子图的左边缘,并且不会修改 3D 子图。有没有办法完全去除 3D 子图周围的空白?我也试过更小ax.dist,如果 3D 绘图在 z 方向上更长,那就不好了。
我正在用一堆多边形绘制一个表面。绘图非常简单,如下所示。
def plotSurface(cell, numOfLayer, name=None, alpha = 0.5):
#import the libraries
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import numpy as np
import matplotlib.pyplot as plt
#limits of the plot
radius = (numOfLayer>1)*(np.sqrt(3.)*(numOfLayer-1)-Length)+Length#the radius of circle to be projected on
#plotting part
fig = plt.figure(frameon=False,figsize=(12,10))
ax = Axes3D(fig)
ax.set_xlim((-2*radius,2*radius))
ax.set_ylim((-2*radius,2*radius))
ax.set_zlim((-0.5*radius,2*radius))
ax.axis('off')
#fig = plt.figure()
#ax = fig.gca(projection='3d')
##iterating through the cell##
for stuff happening here : verts are the polygon vertices
#adding to 3d …Run Code Online (Sandbox Code Playgroud)