def plot(x = None, y = None, z = None, hue = None, size = 8, data = None, color = 'afmhot', smooth = True, n = 4):
    dfdf = copy(data)
    import matplotlib.pyplot as plt
    if data is None and x is not None: print("Need to specify data"); return
    try:
        if type(x)==str: xlabel = x; x = dfdf[xlabel]; x = dummies(x, dummies = False)
    except: pass;
    try: 
        if type(y)==str: ylabel = y; y = dfdf[ylabel]; y = dummies(y, dummies = False)
    except: pass;
    try: 
        if type(z)==str: zlabel = z; z = dfdf[zlabel]; z = dummies(z, dummies = False)
    except: pass;
    try: 
        if type(hue)==str: huelabel = hue; hue = dfdf[huelabel]; hue = dummies(hue, dummies = False)
    except: pass;
    try: 
        xlabel = columns(x)[0]; 
        if xlabel is None: xlabel = "X"
    except: pass;
    try:
        ylabel = columns(y)[0]; 
        if ylabel is None: ylabel = "Y"
    except: pass;
    try: 
        zlabel = columns(z)[0];
        if zlabel is None: zlabel = "Z"
    except: pass;
    try: 
        huelabel = columns(hue)[0]; 
        if huelabel is None: huelabel = "Hue"
    except: pass;

    if x is not None and y is not None and z is not None:
        from mpl_toolkits.mplot3d import Axes3D
        import matplotlib
        fig = plt.figure(figsize=(size,size))
        ax = Axes3D(fig)
        if hue is not None:
            cm = plt.get_cmap(color)
            try: cNorm = matplotlib.colors.Normalize(vmin=np.min(hue)[0], vmax=np.max(hue)[0])
            except: cNorm = matplotlib.colors.Normalize(vmin=np.min(hue), vmax=np.max(hue))
            scalarMap = matplotlib.cm.ScalarMappable(norm=cNorm, cmap=cm)
            ax.scatter(array(x),array(y),array(z),c=scalarMap.to_rgba(array(hue)),s=size*5)
            ax.set_xlabel(xlabel); ax.set_ylabel(ylabel); ax.set_zlabel(zlabel)
            scalarMap.set_array(hue)
            fig.colorbar(scalarMap, pad=0, orientation = "h", shrink = .8)
            plt.show()
        else:
            import matplotlib
            ax.scatter(x,y,z,s=size*5)
            ax.set_xlabel(xlabel); ax.set_ylabel(ylabel); ax.set_zlabel(zlabel)
            plt.show()