Percentile VisualizationΒΆ
The data points are colored using a colormap to indicate the percentile value of the data point from 0 to 95%. Values greater than 95% are indicated by red.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm,colormaps
import s3dlib.surface as s3d
#.. Percentile Visualization
# 1. Define data to examine .........................................
np.random.seed(1)
def get_correlated_dataset(n, dependency, mu, scale):
latent = np.random.randn(n, 3)
dependent = latent.dot(dependency)
scaled = dependent * scale
scaled_with_offset = scaled + mu
# return x y z of the new, correlated dataset
return scaled_with_offset[:, 0], scaled_with_offset[:, 1], scaled_with_offset[:, 2]
corr = np.array([ [0.85, -.15, 0.4], [-0.35, -0.65, 0.7], [-.4, 0.6, 1.0] ])
mu = 0,0,0
sigma = 1.35, 0.56 , 0.68
N = 400
x,y,z = get_correlated_dataset(N, corr, mu, sigma)
data = np.transpose([ x,y,z ])
# 2. Setup and map surfaces .........................................
prct = 0.95
surface = s3d.SphericalSurface(3, color=[0,0,0,0.05], linewidth=.5 )
surface.map_geom_from_svd(data, prct)
surface.shade()
info = str(N) +', '+"{:.0%}".format(prct) + ', ' + '{:04.2f}'.format( surface.svd_dict['sigma'] )
colors_a = []
colorMap = colormaps['viridis']
for val in surface.svd_dict['disarr'] :
if val > 1 : colors_a.append([0.8,0,0,1])
else : colors_a.append(colorMap(val))
# 3. Construct figures, add surfaces, and plot .......................
fig = plt.figure(figsize=plt.figaspect(1))
ax = plt.axes(projection='3d',aspect='equal')
ax.set(xlim=[-3,3], ylim=[-3,3], zlim=[-3,3] )
ax.set_title(info, horizontalalignment='left')
ax.scatter(x,y,z, c=colors_a, edgecolor='k')
ax.add_collection3d(surface.get_transformAxis())
ax.add_collection(surface)
fig.tight_layout()
plt.show()