View Raw SPL
/*****************************************************************************
*                                                                            *
*   CIVIDIS.SPL  Copyright (C) 2021 DSP Development Corporation              *
*                               All Rights Reserved                          *
*                                                                            *
*   Author:      Randy Race                                                  *
*                                                                            *
*   Synopsis:    Generate a colormap of blue, green, yellow                  *
*                                                                            *
*   Revisions:   30 Mar 2021  RRR  Creation                                  *
*                                                                            *
*****************************************************************************/


#if @HELP_CIVIDIS

    CIVIDIS

    Purpose: Generates a colormap of blue, green, yellow.

    Syntax:  CIVIDIS(len)

               len - optional colormap length, defaults to
                     the length of the current colormap


    Returns: A table of RGB triples suitable for the SETCOLORMAP function.

    Example:
             clen = length(getcolormap());
             density(ravel(rep(0..(clen-1), 32), clen)');
             cividis;

             Creates a table of 32 x colormap length RBG values and
             displays the resulting colors. The resulting image is a
             vertical plot of colors ranging from blue (lowest) to
             green to yellow (highest).

    Example:
             cividis(256);showcmap

             Creates a table of 32 x 256 length RBG values and
             displays the resulting colors. The resulting image is a
             vertical plot of colors ranging from blue (lowest) to
             green to yellow (highest).

    Remarks:
             CIVIDIS() by itself sets the colormap and shading.

             a = cividis() or setcolormap(cividis()) returns the rgb values.
             In this case, use SETSHADING to make the new colormap
             take effect on an existing density or 2D plot.

             CIVIDIS as a modification of the VIRIDIS colormap and is
             optimal for viewing by those with or without color vision
             deficiency.

    See Also:
             Autumn
             Bone
             Cool
             Copper
             Gray
             Hot
             Hsv
             Pink
             Rainbow
             Setcolormap
             Setshading
             Showcmap
             Spring
             Summer
             Winter
#endif


/* CIVIDIS colormap */
CIVIDIS(cmaplen)
{
        local rgb;

        if (argc < 1)
        {
                cmaplen = length(getcolormap());
        }

        /* RGB colors */
        rgb =
        {

                {0.0000, 0.1262, 0.3015},
                {0.0000, 0.1292, 0.3077},
                {0.0000, 0.1321, 0.3142},
                {0.0000, 0.1350, 0.3205},
                {0.0000, 0.1379, 0.3269},
                {0.0000, 0.1408, 0.3334},
                {0.0000, 0.1437, 0.3400},
                {0.0000, 0.1465, 0.3467},
                {0.0000, 0.1492, 0.3537},
                {0.0000, 0.1519, 0.3606},
                {0.0000, 0.1546, 0.3676},
                {0.0000, 0.1574, 0.3746},
                {0.0000, 0.1601, 0.3817},
                {0.0000, 0.1629, 0.3888},
                {0.0000, 0.1657, 0.3960},
                {0.0000, 0.1685, 0.4031},
                {0.0000, 0.1714, 0.4102},
                {0.0000, 0.1743, 0.4172},
                {0.0000, 0.1773, 0.4241},
                {0.0000, 0.1798, 0.4307},
                {0.0000, 0.1817, 0.4347},
                {0.0000, 0.1834, 0.4363},
                {0.0000, 0.1852, 0.4368},
                {0.0000, 0.1872, 0.4368},
                {0.0000, 0.1901, 0.4365},
                {0.0000, 0.1930, 0.4361},
                {0.0000, 0.1958, 0.4356},
                {0.0000, 0.1987, 0.4349},
                {0.0000, 0.2015, 0.4343},
                {0.0000, 0.2044, 0.4336},
                {0.0000, 0.2073, 0.4329},
                {0.0055, 0.2101, 0.4322},
                {0.0236, 0.2130, 0.4314},
                {0.0416, 0.2158, 0.4308},
                {0.0576, 0.2187, 0.4301},
                {0.0710, 0.2215, 0.4293},
                {0.0827, 0.2244, 0.4287},
                {0.0932, 0.2272, 0.4280},
                {0.1030, 0.2300, 0.4274},
                {0.1120, 0.2329, 0.4268},
                {0.1204, 0.2357, 0.4262},
                {0.1283, 0.2385, 0.4256},
                {0.1359, 0.2414, 0.4251},
                {0.1431, 0.2442, 0.4245},
                {0.1500, 0.2470, 0.4241},
                {0.1566, 0.2498, 0.4236},
                {0.1630, 0.2526, 0.4232},
                {0.1692, 0.2555, 0.4228},
                {0.1752, 0.2583, 0.4224},
                {0.1811, 0.2611, 0.4220},
                {0.1868, 0.2639, 0.4217},
                {0.1923, 0.2667, 0.4214},
                {0.1977, 0.2695, 0.4212},
                {0.2030, 0.2723, 0.4209},
                {0.2082, 0.2751, 0.4207},
                {0.2133, 0.2780, 0.4205},
                {0.2183, 0.2808, 0.4204},
                {0.2232, 0.2836, 0.4203},
                {0.2281, 0.2864, 0.4202},
                {0.2328, 0.2892, 0.4201},
                {0.2375, 0.2920, 0.4200},
                {0.2421, 0.2948, 0.4200},
                {0.2466, 0.2976, 0.4200},
                {0.2511, 0.3004, 0.4201},
                {0.2556, 0.3032, 0.4201},
                {0.2599, 0.3060, 0.4202},
                {0.2643, 0.3088, 0.4203},
                {0.2686, 0.3116, 0.4205},
                {0.2728, 0.3144, 0.4206},
                {0.2770, 0.3172, 0.4208},
                {0.2811, 0.3200, 0.4210},
                {0.2853, 0.3228, 0.4212},
                {0.2894, 0.3256, 0.4215},
                {0.2934, 0.3284, 0.4218},
                {0.2974, 0.3312, 0.4221},
                {0.3014, 0.3340, 0.4224},
                {0.3054, 0.3368, 0.4227},
                {0.3093, 0.3396, 0.4231},
                {0.3132, 0.3424, 0.4236},
                {0.3170, 0.3453, 0.4240},
                {0.3209, 0.3481, 0.4244},
                {0.3247, 0.3509, 0.4249},
                {0.3285, 0.3537, 0.4254},
                {0.3323, 0.3565, 0.4259},
                {0.3361, 0.3593, 0.4264},
                {0.3398, 0.3622, 0.4270},
                {0.3435, 0.3650, 0.4276},
                {0.3472, 0.3678, 0.4282},
                {0.3509, 0.3706, 0.4288},
                {0.3546, 0.3734, 0.4294},
                {0.3582, 0.3763, 0.4302},
                {0.3619, 0.3791, 0.4308},
                {0.3655, 0.3819, 0.4316},
                {0.3691, 0.3848, 0.4322},
                {0.3727, 0.3876, 0.4331},
                {0.3763, 0.3904, 0.4338},
                {0.3798, 0.3933, 0.4346},
                {0.3834, 0.3961, 0.4355},
                {0.3869, 0.3990, 0.4364},
                {0.3905, 0.4018, 0.4372},
                {0.3940, 0.4047, 0.4381},
                {0.3975, 0.4075, 0.4390},
                {0.4010, 0.4104, 0.4400},
                {0.4045, 0.4132, 0.4409},
                {0.4080, 0.4161, 0.4419},
                {0.4114, 0.4189, 0.4430},
                {0.4149, 0.4218, 0.4440},
                {0.4183, 0.4247, 0.4450},
                {0.4218, 0.4275, 0.4462},
                {0.4252, 0.4304, 0.4473},
                {0.4286, 0.4333, 0.4485},
                {0.4320, 0.4362, 0.4496},
                {0.4354, 0.4390, 0.4508},
                {0.4388, 0.4419, 0.4521},
                {0.4422, 0.4448, 0.4534},
                {0.4456, 0.4477, 0.4547},
                {0.4489, 0.4506, 0.4561},
                {0.4523, 0.4535, 0.4575},
                {0.4556, 0.4564, 0.4589},
                {0.4589, 0.4593, 0.4604},
                {0.4622, 0.4622, 0.4620},
                {0.4656, 0.4651, 0.4635},
                {0.4689, 0.4680, 0.4650},
                {0.4722, 0.4709, 0.4665},
                {0.4756, 0.4738, 0.4679},
                {0.4790, 0.4767, 0.4691},
                {0.4825, 0.4797, 0.4701},
                {0.4861, 0.4826, 0.4707},
                {0.4897, 0.4856, 0.4714},
                {0.4934, 0.4886, 0.4719},
                {0.4971, 0.4915, 0.4723},
                {0.5008, 0.4945, 0.4727},
                {0.5045, 0.4975, 0.4730},
                {0.5083, 0.5005, 0.4732},
                {0.5121, 0.5035, 0.4734},
                {0.5158, 0.5065, 0.4736},
                {0.5196, 0.5095, 0.4737},
                {0.5234, 0.5125, 0.4738},
                {0.5272, 0.5155, 0.4739},
                {0.5310, 0.5186, 0.4739},
                {0.5349, 0.5216, 0.4738},
                {0.5387, 0.5246, 0.4739},
                {0.5425, 0.5277, 0.4738},
                {0.5464, 0.5307, 0.4736},
                {0.5502, 0.5338, 0.4735},
                {0.5541, 0.5368, 0.4733},
                {0.5579, 0.5399, 0.4732},
                {0.5618, 0.5430, 0.4729},
                {0.5657, 0.5461, 0.4727},
                {0.5696, 0.5491, 0.4723},
                {0.5735, 0.5522, 0.4720},
                {0.5774, 0.5553, 0.4717},
                {0.5813, 0.5584, 0.4714},
                {0.5852, 0.5615, 0.4709},
                {0.5892, 0.5646, 0.4705},
                {0.5931, 0.5678, 0.4701},
                {0.5970, 0.5709, 0.4696},
                {0.6010, 0.5740, 0.4691},
                {0.6050, 0.5772, 0.4685},
                {0.6089, 0.5803, 0.4680},
                {0.6129, 0.5835, 0.4673},
                {0.6168, 0.5866, 0.4668},
                {0.6208, 0.5898, 0.4662},
                {0.6248, 0.5929, 0.4655},
                {0.6288, 0.5961, 0.4649},
                {0.6328, 0.5993, 0.4641},
                {0.6368, 0.6025, 0.4632},
                {0.6408, 0.6057, 0.4625},
                {0.6449, 0.6089, 0.4617},
                {0.6489, 0.6121, 0.4609},
                {0.6529, 0.6153, 0.4600},
                {0.6570, 0.6185, 0.4591},
                {0.6610, 0.6217, 0.4583},
                {0.6651, 0.6250, 0.4573},
                {0.6691, 0.6282, 0.4562},
                {0.6732, 0.6315, 0.4553},
                {0.6773, 0.6347, 0.4543},
                {0.6813, 0.6380, 0.4532},
                {0.6854, 0.6412, 0.4521},
                {0.6895, 0.6445, 0.4511},
                {0.6936, 0.6478, 0.4499},
                {0.6977, 0.6511, 0.4487},
                {0.7018, 0.6544, 0.4475},
                {0.7060, 0.6577, 0.4463},
                {0.7101, 0.6610, 0.4450},
                {0.7142, 0.6643, 0.4437},
                {0.7184, 0.6676, 0.4424},
                {0.7225, 0.6710, 0.4409},
                {0.7267, 0.6743, 0.4396},
                {0.7308, 0.6776, 0.4382},
                {0.7350, 0.6810, 0.4368},
                {0.7392, 0.6844, 0.4352},
                {0.7434, 0.6877, 0.4338},
                {0.7476, 0.6911, 0.4322},
                {0.7518, 0.6945, 0.4307},
                {0.7560, 0.6979, 0.4290},
                {0.7602, 0.7013, 0.4273},
                {0.7644, 0.7047, 0.4258},
                {0.7686, 0.7081, 0.4241},
                {0.7729, 0.7115, 0.4223},
                {0.7771, 0.7150, 0.4205},
                {0.7814, 0.7184, 0.4188},
                {0.7856, 0.7218, 0.4168},
                {0.7899, 0.7253, 0.4150},
                {0.7942, 0.7288, 0.4129},
                {0.7985, 0.7322, 0.4111},
                {0.8027, 0.7357, 0.4090},
                {0.8070, 0.7392, 0.4070},
                {0.8114, 0.7427, 0.4049},
                {0.8157, 0.7462, 0.4028},
                {0.8200, 0.7497, 0.4007},
                {0.8243, 0.7532, 0.3984},
                {0.8287, 0.7568, 0.3961},
                {0.8330, 0.7603, 0.3938},
                {0.8374, 0.7639, 0.3915},
                {0.8417, 0.7674, 0.3892},
                {0.8461, 0.7710, 0.3869},
                {0.8505, 0.7745, 0.3843},
                {0.8548, 0.7781, 0.3818},
                {0.8592, 0.7817, 0.3793},
                {0.8636, 0.7853, 0.3766},
                {0.8681, 0.7889, 0.3739},
                {0.8725, 0.7926, 0.3712},
                {0.8769, 0.7962, 0.3684},
                {0.8813, 0.7998, 0.3657},
                {0.8858, 0.8035, 0.3627},
                {0.8902, 0.8071, 0.3599},
                {0.8947, 0.8108, 0.3569},
                {0.8992, 0.8145, 0.3538},
                {0.9037, 0.8182, 0.3507},
                {0.9082, 0.8219, 0.3474},
                {0.9127, 0.8256, 0.3442},
                {0.9172, 0.8293, 0.3409},
                {0.9217, 0.8330, 0.3374},
                {0.9262, 0.8367, 0.3340},
                {0.9308, 0.8405, 0.3306},
                {0.9353, 0.8442, 0.3268},
                {0.9399, 0.8480, 0.3232},
                {0.9444, 0.8518, 0.3195},
                {0.9490, 0.8556, 0.3155},
                {0.9536, 0.8593, 0.3116},
                {0.9582, 0.8632, 0.3076},
                {0.9628, 0.8670, 0.3034},
                {0.9674, 0.8708, 0.2990},
                {0.9721, 0.8746, 0.2947},
                {0.9767, 0.8785, 0.2901},
                {0.9814, 0.8823, 0.2856},
                {0.9860, 0.8862, 0.2807},
                {0.9907, 0.8901, 0.2759},
                {0.9954, 0.8940, 0.2708},
                {1.0000, 0.8979, 0.2655},
                {1.0000, 0.9018, 0.2600},
                {1.0000, 0.9057, 0.2593},
                {1.0000, 0.9094, 0.2634},
                {1.0000, 0.9131, 0.2680},
                {1.0000, 0.9169, 0.2731}
        };

        /* interpolate to colormap size */
        rgb = xylookup(1..length(rgb), rgb, linspace(1, length(rgb), cmaplen));

        /* remove X columns */
        rgb = rgb[.., 1..2..6];

        if (outargc == 0)
        {
                /* set the colormap and shading */
                setplotshading(rgb);
        }
        else
        {
                /* return the colormap */
                setrgbprops(rgb);

                return(rgb);
        }
}