如何使用matplotlib.gridspec绘制不同方面的体素?

问题描述

我想在多个子图中绘制一些包含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()

enter image description here

目前,正确的图位于多列gridspec的中心。我希望在保持外观的同时以多列方式显示它们。像这样:

enter image description here

这如何在matplotlib中完成?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)