问题描述
我想在多个子图中绘制一些包含ax.voxels
的3D图。我尝试过matplotlib.gridspec
,但它缩小了我所有的图表,这不是我期望的:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from mpl_toolkits.mplot3d import Axes3D
def fix_view(ax,scalefactor=1.5):
# preserves constant lengths of cube edges
bBox = np.array([getattr(ax,'get_{}lim'.format(dim))() for dim in 'xyz'])
bBox_center = np.mean(bBox,axis=1)
bBox_dim = np.max(bBox,axis=1) - np.min(bBox,axis=1)
scaling_factors = scalefactor * bBox_dim / np.max(bBox_dim)
tr1,tr2,tr3 = bBox_center
s1,s2,s3 = scaling_factors
A = np.array([[1,-tr1],[0,1,-tr2],-tr3],1]])
T = np.array([[s1,0],s3,1]])
B = np.array([[1,tr1],tr2],tr3],1]])
ax.get_proj = lambda: np.dot(np.dot(np.dot(Axes3D.get_proj(ax),B),T),A)
def draw(spec,row,col):
ax = fig.add_subplot(spec[row,col],projection='3d')
ax.set_title('body of shape = (8,1)')
ax.voxels(arr,facecolors='aqua',edgecolors='k')
fix_view(ax,scalefactor=1.5)
#ax.axis('off')
arr = np.ones(shape=(8,1),dtype=bool)
fig = plt.figure(constrained_layout=True)
spec = gridspec.GridSpec(ncols=10,nrows=3,figure=fig,wspace=0.025,hspace=0.05)
for i in range(3):
draw(spec,i,0)
draw(spec,slice(1,10))
plt.show()
目前,正确的图位于多列gridspec
的中心。我希望在保持外观的同时以多列方式显示它们。像这样:
这如何在matplotlib中完成?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)