# Compound DualCmapΒΆ

Similar to the Compound Color Maps example, a dual colormap is applied to map colors using the map_color_from_op method.

import numpy as np
from matplotlib import pyplot as plt
import s3dlib.surface as s3d
import s3dlib.cmap_utilities as cmu

#.. Plaid Dualcmap

# 1. Define function to examine .....................................

def flatten(rtp,twists) :
r,t,p = rtp
flat = 0.7
T = t - twists*( p )
R = (1-flat)*r + flat*(np.sin(p))**4
return R,T,p

# 2. Setup and map surfaces .........................................

cmap = cmu.binary_cmap('tab:red','mistyrose')
cmap = cmu.mirrored_cmap(cmap)
cmap = cmu.mirrored_cmap(cmap)
cmap = cmu.mirrored_cmap(cmap)
cmap = cmu.mirrored_cmap(cmap)
cmap = cmu.mirrored_cmap(cmap,name='striped')
cmap2d = cmu.DualCmap(cmap,cmap,kind='ave')

surface = s3d.SphericalSurface.grid(270,32*4,'r')
surface.map_color_from_op( lambda rtp : cmap2d(rtp[1],rtp[2]) )
surface.map_geom_from_op(  lambda rtp : flatten(rtp,1) )

N = 200
x=np.linspace(0,1,N)
y=np.linspace(0,1,N)
z = cmap2d(*np.meshgrid(x, y)).T

# 3. Construct figures, add surface, plot ...........................
info = str(surface) +'\n' + str(cmap2d)
minmax = (-0.5*N,1.5*N)
fig = plt.figure(figsize=(8,4))
fig.text(0.975,0.975,info, ha='right', va='top', fontsize='smaller', multialignment='right')

ax1 = fig.add_subplot(121, projection='3d', aspect='equal')
fig.text(0.45,0.85,'Plaid DualCmap', ha='left',
va='top', fontsize='xx-large', multialignment='right')
ax1.set_axis_off()
s3d.auto_scale(ax1,surface,uscale=0.65)
fig.text(0.75,0.23,r'$\theta$  cmap axis', ha='center', va='center', fontsize='large')
fig.text(0.61,0.51,r'$\varphi$ cmap axis', ha='center', va='center', fontsize='large', rotation=90)