Hi,
I have been struggling to find a resource that I truly understand and that is exactly what I'm looking for. I'm currently learning python, but working on it for my senior research project.
So, I have created a list that has randomized dimensions within in it. I want to take the dimensions and plot a series of 3D rectangles that appear one after another in a row and also can stack up on one another (eventually until each column hits a certain volume). I haven't had any luck plotting 3D rectangles. Does anyone know a way I can do this based on the dimensions within the list?
Here is my code:
Also, I want to note that this specifically does a birdseye view.
import numpy
from matplotlib.collections import PatchCollection
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.patches as patches
#%matplotlib inline
import random
def createBox():
    #this is what randomly generates the dimensions of the boxes and saves to list
    N= int(input ("Enter number of boxes :"))
    list1 = [];
    list2 = [];
    list3 = [];
    list4 = [];
    list5 = [];
    for i in range(0,N):
        x = random.randint(1,4) #non integers would be random.random or random.unif
        y = random.randint(1,4)
        z = random.randint(1,4)
        box = [x,y,z];
        area = [x,y]
        list1.append(box)
        list2.append(area)
    print(list1)
    print(list2)
    #Here is where the organizes the dimensions of the box
    for i in list2:
        result = numpy.prod(i)
        list3.append(result)
    list3.sort(reverse = True)
    print(list3)
    
    for box in list2:
        l = box[0] #this is along the x-axis
        w = box[1] #this is along the y-axis
        if l < w: #rotates the box 90 degrees, where largest size is along x-axis
            l = box[1]
            w = box[0]
        res = [l,w]
        list4.append(res)
    list4.sort(reverse = True)
    print(list4)
    lims = (0,15)
    fig1 = plt.figure()
    ax1 = fig1.add_subplot(111, aspect = 'equal')
    plt.ylim(lims)
    plt.xlim(lims)
    patchlist = [];
    x = 0
    y = 0
    for box in list4:
        l1 = box[0] #along the x-axis
        w1 = box[1] #along the y-axis
        list5.append(w1)
        if sum(list5) <= 12:
            rec = patches.Rectangle((x,y),l1,w1,fill = True, edgecolor= 'black', linewidth = 2.0 , linestyle='-')
            # patchlist.append(patches.Rectangle((x,y),l1,w1,fill = False, edgecolor= 'black', linewidth = 2.0 , linestyle='-'))
            y = y + w1
            # ax1.add_collection(PatchCollection(patchlist))
            ax1.add_artist(rec) ##helps create the color
        else:
            x = x + 4
            y = 0
            list5 = [w1]
            rec = patches.Rectangle((x,y),l1,w1,fill = True, edgecolor ='black',linewidth = 2.0, linestyle='-')
            # patchlist.append(patches.Rectangle((x + l1,y),l1,w1,fill = False, edgecolor ='black',linewidth = 2.0, linestyle='-'))
            y = y + w1
            # ax1.add_collection(PatchCollection(patchlist))
            ax1.add_artist(rec)
    plt.show()
 
        
    
Brittney P.
Thank you so much!!04/08/21