    001/* ===========================================================
    002 * Orson Charts : a 3D chart library for the Java(tm) platform
    003 * ===========================================================
    004 *
    005 * (C)opyright 2013-2016, by Object Refinery Limited.  All rights reserved.
    006 *
    007 * http://www.object-refinery.com/orsoncharts/index.html
    008 *
    009 * This program is free software: you can redistribute it and/or modify
    010 * it under the terms of the GNU General Public License as published by
    011 * the Free Software Foundation, either version 3 of the License, or
    012 * (at your option) any later version.
    013 *
    014 * This program is distributed in the hope that it will be useful,
    015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
    016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    017 * GNU General Public License for more details.
    018 *
    019 * You should have received a copy of the GNU General Public License
    020 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    021 *
    022 * [Oracle and Java are registered trademarks of Oracle and/or its affiliates.
    023 * Other names may be trademarks of their respective owners.]
    024 *
    025 * If you do not wish to be bound by the terms of the GPL, an alternative
    026 * commercial license can be purchased.  For details, please see visit the
    027 * Orson Charts home page:
    028 *
    029 * http://www.object-refinery.com/orsoncharts/index.html
    030 *
    031 */
    032
    033package com.orsoncharts;
    034
    035import java.awt.Color;
    036
    037/**
    038 * A utility class that creates and returns color swatches that can be used
    039 * in charts.  The "i want hue" utility has been used to generate a number
    040 * of these color sets.
    041 * See <a href="http://tools.medialab.sciences-po.fr/iwanthue/">
    042 * http://tools.medialab.sciences-po.fr/iwanthue/</a>.
    043 */
    044public class Colors {
    045
    046    private Colors() {
    047        // no need to instantiate this class
    048    }
    049
    050    /**
    051     * Returns the default colors.
    052     *
    053     * @return The default colors.
    054     */
    055    public static Color[] getDefaultColors() {
    056        return createShadesColors();
    057    }
    058
    059    /**
    060     * Returns a palette of ten colors created using the "i want hue" utility,
    061     * using the preset "Fancy (light background)" settings.  A new array
    062     * instance is created for each call to this method.  A link to the
    063     * "i want hue" utility is given in the class description.
    064     *
    065     * @return An array of ten colors (never {@code null}).
    066     *
    067     * @since 1.2
    068     */
    069    public static Color[] createFancyLightColors() {
    070        Color[] result = new Color[10];
    071        result[0] = new Color(239, 164, 127);
    072        result[1] = new Color(140, 228, 139);
    073        result[2] = new Color(155, 208, 227);
    074        result[3] = new Color(221, 228, 95);
    075        result[4] = new Color(118, 223, 194);
    076        result[5] = new Color(240, 166, 184);
    077        result[6] = new Color(231, 185, 98);
    078        result[7] = new Color(186, 214, 150);
    079        result[8] = new Color(217, 184, 226);
    080        result[9] = new Color(201, 212, 116);
    081        return result;
    082    }
    083
    084    /**
    085     * Returns a palette of ten colors created using the "i want hue" utility,
    086     * using the preset "Fancy (dark background)" settings.  A new array
    087     * instance is created for each call to this method.  A link to the
    088     * "i want hue" utility is given in the class description.
    089     *
    090     * @return An array of ten colors (never {@code null}).
    091     *
    092     * @since 1.2
    093     */
    094    public static Color[] createFancyDarkColors() {
    095        Color[] result = new Color[10];
    096        result[0] = new Color(78, 81, 97);
    097        result[1] = new Color(91, 104, 51);
    098        result[2] = new Color(138, 75, 65);
    099        result[3] = new Color(72, 62, 34);
    100        result[4] = new Color(58, 100, 75);
    101        result[5] = new Color(39, 63, 59);
    102        result[6] = new Color(105, 68, 75);
    103        result[7] = new Color(120, 90, 120);
    104        result[8] = new Color(119, 90, 50);
    105        result[9] = new Color(59, 103, 111);
    106        return result;
    107    }
    108
    109    /**
    110     * Returns a palette of ten colors created using the "i want hue" utility,
    111     * using the preset "Shades" settings.  A new array instance is created for
    112     * each call to this method.  A link to the "i want hue" utility is given
    113     * in the class description.
    114     *
    115     * @return An array of ten colors (never {@code null}).
    116     *
    117     * @since 1.2
    118     */
    119    public static Color[] createShadesColors() {
    120        Color[] result = new Color[10];
    121        result[0] = new Color(137, 132, 104);
    122        result[1] = new Color(217, 232, 208);
    123        result[2] = new Color(53, 48, 40);
    124        result[3] = new Color(240, 225, 172);
    125        result[4] = new Color(196, 160, 128);
    126        result[5] = new Color(92, 96, 87);
    127        result[6] = new Color(136, 141, 136);
    128        result[7] = new Color(106, 93, 66);
    129        result[8] = new Color(205, 199, 168);
    130        result[9] = new Color(158, 168, 143);
    131        return result;
    132    }
    133
    134    /**
    135     * Returns a palette of ten colors created using the "i want hue" utility,
    136     * using the preset "Tarnish" settings.  A new array instance is created for
    137     * each call to this method.  A link to the "i want hue" utility is given
    138     * in the class description.
    139     *
    140     * @return An array of ten colors (never {@code null}).
    141     *
    142     * @since 1.2
    143     */
    144    public static Color[] createTarnishColors() {
    145        Color[] result = new Color[10];
    146        result[0] = new Color(148, 129, 121);
    147        result[1] = new Color(179, 181, 136);
    148        result[2] = new Color(204, 163, 140);
    149        result[3] = new Color(102, 93, 80);
    150        result[4] = new Color(164, 178, 159);
    151        result[5] = new Color(156, 130, 100);
    152        result[6] = new Color(129, 142, 124);
    153        result[7] = new Color(186, 168, 159);
    154        result[8] = new Color(144, 148, 108);
    155        result[9] = new Color(189, 169, 131);
    156        return result;
    157    }
    158
    159    /**
    160     * Returns a palette of ten colors created using the "i want hue" utility,
    161     * using the preset "Pastel" settings.  A new array instance is created for
    162     * each call to this method.  A link to the "i want hue" utility is given
    163     * in the class description.
    164     *
    165     * @return An array of ten colors (never {@code null}).
    166     *
    167     * @since 1.2
    168     */
    169    public static Color[] createPastelColors() {
    170        Color[] result = new Color[10];
    171        result[0] = new Color(232, 177, 165);
    172        result[1] = new Color(207, 235, 142);
    173        result[2] = new Color(142, 220, 220);
    174        result[3] = new Color(228, 186, 115);
    175        result[4] = new Color(187, 200, 230);
    176        result[5] = new Color(157, 222, 177);
    177        result[6] = new Color(234, 183, 210);
    178        result[7] = new Color(213, 206, 169);
    179        result[8] = new Color(202, 214, 205);
    180        result[9] = new Color(195, 204, 133);
    181        return result;
    182    }
    183
    184    /**
    185     * Returns a palette of ten colors created using the "i want hue" utility,
    186     * using the preset "Pimp" settings.  A new array instance is created for
    187     * each call to this method.  A link to the "i want hue" utility is given
    188     * in the class description.
    189     *
    190     * @return An array of ten colors (never {@code null}).
    191     *
    192     * @since 1.2
    193     */
    194    public static Color[] createPimpColors() {
    195        Color[] result = new Color[10];
    196        result[0] = new Color(197, 75, 103);
    197        result[1] = new Color(85, 154, 48);
    198        result[2] = new Color(122, 110, 206);
    199        result[3] = new Color(190, 100, 50);
    200        result[4] = new Color(201, 79, 209);
    201        result[5] = new Color(95, 127, 170);
    202        result[6] = new Color(147, 129, 39);
    203        result[7] = new Color(63, 142, 96);
    204        result[8] = new Color(186, 84, 150);
    205        result[9] = new Color(219, 66, 52);
    206        return result;
    207    }
    208
    209    /**
    210     * Returns a palette of ten colors created using the "i want hue" utility,
    211     * using the preset "Intense" settings.  A new array instance is created for
    212     * each call to this method.  A link to the "i want hue" utility is given
    213     * in the class description.
    214     *
    215     * @return An array of ten colors (never {@code null}).
    216     *
    217     * @since 1.2
    218     */
    219    public static Color[] createIntenseColors() {
    220        Color[] result = new Color[10];
    221        result[0] = new Color(107, 122, 160);
    222        result[1] = new Color(99, 176, 67);
    223        result[2] = new Color(214, 85, 52);
    224        result[3] = new Color(202, 79, 200);
    225        result[4] = new Color(184, 149, 57);
    226        result[5] = new Color(82, 168, 146);
    227        result[6] = new Color(194, 84, 128);
    228        result[7] = new Color(77, 102, 50);
    229        result[8] = new Color(132, 108, 197);
    230        result[9] = new Color(144, 74, 61);
    231        return result;
    232    }
    233
    234    /**
    235     * Returns a palette of ten colors created using the "i want hue" utility,
    236     * using the preset "Fluo" settings.  A new array instance is created for
    237     * each call to this method.  A link to the "i want hue" utility is given
    238     * in the class description.
    239     *
    240     * @return An array of ten colors (never {@code null}).
    241     *
    242     * @since 1.2
    243     */
    244    public static Color[] createFluoColors() {
    245        Color[] result = new Color[10];
    246        result[0] = new Color(108, 236, 137);
    247        result[1] = new Color(253, 187, 46);
    248        result[2] = new Color(56, 236, 216);
    249        result[3] = new Color(171, 231, 51);
    250        result[4] = new Color(221, 214, 74);
    251        result[5] = new Color(106, 238, 70);
    252        result[6] = new Color(172, 230, 100);
    253        result[7] = new Color(242, 191, 82);
    254        result[8] = new Color(221, 233, 56);
    255        result[9] = new Color(242, 206, 47);
    256        return result;
    257    }
    258
    259    /**
    260     * Returns a palette of ten colors created using the "i want hue" utility,
    261     * using the preset "Red Roses" settings.  A new array instance is created
    262     * for each call to this method.  A link to the "i want hue" utility is
    263     * given in the class description.
    264     *
    265     * @return An array of ten colors (never {@code null}).
    266     *
    267     * @since 1.2
    268     */
    269    public static Color[] createRedRosesColors() {
    270        Color[] result = new Color[10];
    271        result[0] = new Color(230, 129, 128);
    272        result[1] = new Color(233, 56, 39);
    273        result[2] = new Color(225, 45, 102);
    274        result[3] = new Color(172, 79, 55);
    275        result[4] = new Color(214, 154, 128);
    276        result[5] = new Color(156, 96, 81);
    277        result[6] = new Color(190, 77, 91);
    278        result[7] = new Color(228, 121, 91);
    279        result[8] = new Color(216, 63, 80);
    280        result[9] = new Color(209, 75, 46);
    281        return result;
    282    }
    283
    284    /**
    285     * Returns a palette of ten colors created using the "i want hue" utility,
    286     * using the preset "Ochre Sand" settings.  A new array instance is created
    287     * for each call to this method.  A link to the "i want hue" utility is
    288     * given in the class description.
    289     *
    290     * @return An array of ten colors (never {@code null}).
    291     *
    292     * @since 1.2
    293     */
    294    public static Color[] createOchreSandColors() {
    295        Color[] result = new Color[10];
    296        result[0] = new Color(218, 180, 125);
    297        result[1] = new Color(245, 184, 36);
    298        result[2] = new Color(159, 103, 28);
    299        result[3] = new Color(124, 96, 55);
    300        result[4] = new Color(224, 132, 56);
    301        result[5] = new Color(185, 143, 48);
    302        result[6] = new Color(229, 171, 97);
    303        result[7] = new Color(232, 165, 54);
    304        result[8] = new Color(171, 102, 53);
    305        result[9] = new Color(160, 122, 71);
    306        return result;
    307    }
    308
    309    /**
    310     * Returns a palette of ten colors created using the "i want hue" utility,
    311     * using the preset "Yellow Lime" settings.  A new array instance is created
    312     * for each call to this method.  A link to the "i want hue" utility is
    313     * given in the class description.
    314     *
    315     * @return An array of ten colors (never {@code null}).
    316     *
    317     * @since 1.2
    318     */
    319    public static Color[] createYellowLimeColors() {
    320        Color[] result = new Color[10];
    321        result[0] = new Color(235, 203, 59);
    322        result[1] = new Color(113, 108, 56);
    323        result[2] = new Color(222, 206, 134);
    324        result[3] = new Color(169, 166, 62);
    325        result[4] = new Color(214, 230, 54);
    326        result[5] = new Color(225, 221, 105);
    327        result[6] = new Color(128, 104, 23);
    328        result[7] = new Color(162, 151, 86);
    329        result[8] = new Color(117, 121, 25);
    330        result[9] = new Color(183, 179, 40);
    331        return result;
    332    }
    333
    334    /**
    335     * Returns a palette of ten colors created using the "i want hue" utility,
    336     * using the preset "Green Mint" settings.  A new array instance is created
    337     * for each call to this method.  A link to the "i want hue" utility is
    338     * given in the class description.
    339     *
    340     * @return An array of ten colors (never {@code null}).
    341     *
    342     * @since 1.2
    343     */
    344    public static Color[] createGreenMintColors() {
    345        Color[] result = new Color[10];
    346        result[0] = new Color(99, 224, 113);
    347        result[1] = new Color(98, 132, 83);
    348        result[2] = new Color(145, 234, 49);
    349        result[3] = new Color(181, 215, 158);
    350        result[4] = new Color(95, 171, 43);
    351        result[5] = new Color(100, 208, 142);
    352        result[6] = new Color(172, 222, 84);
    353        result[7] = new Color(75, 139, 53);
    354        result[8] = new Color(177, 216, 123);
    355        result[9] = new Color(83, 223, 60);
    356        return result;
    357    }
    358
    359    /**
    360     * Returns a palette of ten colors created using the "i want hue" utility,
    361     * using the preset "Ice Cube" settings.  A new array instance is created
    362     * for each call to this method.  A link to the "i want hue" utility is
    363     * given in the class description.
    364     *
    365     * @return An array of ten colors (never {@code null}).
    366     *
    367     * @since 1.2
    368     */
    369    public static Color[] createIceCubeColors() {
    370        Color[] result = new Color[10];
    371        result[0] = new Color(112, 235, 233);
    372        result[1] = new Color(54, 110, 100);
    373        result[2] = new Color(211, 232, 208);
    374        result[3] = new Color(94, 230, 191);
    375        result[4] = new Color(76, 154, 155);
    376        result[5] = new Color(156, 181, 157);
    377        result[6] = new Color(67, 152, 126);
    378        result[7] = new Color(112, 135, 119);
    379        result[8] = new Color(155, 213, 192);
    380        result[9] = new Color(80, 195, 190);
    381        return result;
    382    }
    383
    384    /**
    385     * Returns a palette of ten colors created using the "i want hue" utility,
    386     * using the preset "Blue Ocean" settings.  A new array instance is created
    387     * for each call to this method.  A link to the "i want hue" utility is
    388     * given in the class description.
    389     *
    390     * @return An array of ten colors (never {@code null}).
    391     *
    392     * @since 1.2
    393     */
    394    public static Color[] createBlueOceanColors() {
    395        Color[] result = new Color[10];
    396        result[0] = new Color(53, 84, 154);
    397        result[1] = new Color(41, 46, 57);
    398        result[2] = new Color(115, 124, 151);
    399        result[3] = new Color(38, 52, 91);
    400        result[4] = new Color(84, 117, 211);
    401        result[5] = new Color(76, 125, 181);
    402        result[6] = new Color(109, 108, 112);
    403        result[7] = new Color(48, 105, 134);
    404        result[8] = new Color(72, 82, 107);
    405        result[9] = new Color(91, 99, 144);
    406        return result;
    407    }
    408
    409    /**
    410     * Returns a palette of ten colors created using the "i want hue" utility,
    411     * using the preset "Indigo Night" settings.  A new array instance is
    412     * created for each call to this method.  A link to the "i want hue"
    413     * utility is given in the class description.
    414     *
    415     * @return An array of ten colors (never {@code null}).
    416     *
    417     * @since 1.2
    418     */
    419    public static Color[] createIndigoNightColors() {
    420        Color[] result = new Color[10];
    421        result[0] = new Color(127, 88, 147);
    422        result[1] = new Color(201, 67, 217);
    423        result[2] = new Color(112, 97, 218);
    424        result[3] = new Color(219, 134, 222);
    425        result[4] = new Color(154, 80, 172);
    426        result[5] = new Color(170, 106, 231);
    427        result[6] = new Color(142, 111, 210);
    428        result[7] = new Color(194, 149, 235);
    429        result[8] = new Color(152, 118, 188);
    430        result[9] = new Color(214, 101, 237);
    431        return result;
    432    }
    433
    434    /**
    435     * Returns a palette of ten colors created using the "i want hue" utility,
    436     * using the preset "Purple Wine" settings.  A new array instance is created
    437     * for each call to this method.  A link to the "i want hue" utility is
    438     * given in the class description.
    439     *
    440     * @return An array of ten colors (never {@code null}).
    441     *
    442     * @since 1.2
    443     */
    444    public static Color[] createPurpleWineColors() {
    445        Color[] result = new Color[10];
    446        result[0] = new Color(116, 28, 93);
    447        result[1] = new Color(112, 79, 75);
    448        result[2] = new Color(178, 37, 101);
    449        result[3] = new Color(109, 24, 56);
    450        result[4] = new Color(167, 42, 140);
    451        result[5] = new Color(66, 30, 40);
    452        result[6] = new Color(128, 70, 95);
    453        result[7] = new Color(78, 20, 56);
    454        result[8] = new Color(155, 62, 111);
    455        result[9] = new Color(139, 61, 75);
    456        return result;
    457    }
    458
    459    /**
    460     * Returns a palette of 7 colors with earth tones.
    461     *
    462     * @return An array of 7 colors (never {@code null}).
    463     */
    464     public static Color[] getEarthColors() {
    465         Color[] result = new Color[7];
    466         result[0] = new Color(98, 98, 98);
    467         result[1] = new Color(159, 87, 43);
    468         result[2] = new Color(194, 176, 46);
    469         result[3] = new Color(134, 155, 64);
    470         result[4] = new Color(57, 118, 40);
    471         result[5] = new Color(40, 114, 110);
    472         result[6] = new Color(78, 79, 62);
    473         return result;
    474    }
    475
    476    /**
    477     * Returns a newly created array containing 9 colors from the the
    478     * ColorBrewer tool.  This is a high-contrast set of colors, good for
    479     * pie charts.
    480     *
    481     * http://colorbrewer2.org/?type=qualitative&amp;scheme=Set1&amp;n=9
    482     *
    483     * @return A color array.
    484     */
    485    public static Color[] getBrewerQualitativeSet1N9Colors() {
    486        Color[] result = new Color[9];
    487        result[0] = new Color(228, 26, 28);
    488        result[1] = new Color(55, 126, 184);
    489        result[2] = new Color(77, 175, 74);
    490        result[3] = new Color(152, 78, 163);
    491        result[4] = new Color(255, 127, 0);
    492        result[5] = new Color(255, 255, 51);
    493        result[6] = new Color(166, 86, 40);
    494        result[7] = new Color(247, 129, 191);
    495        result[8] = new Color(153, 153, 153);
    496        return result;
    497    }
    498
    499    /**
    500     * Returns a newly created array containing 12 colors from the the
    501     * ColorBrewer tool.
    502     *
    503     * http://colorbrewer2.org/?type=qualitative&amp;scheme=Paired&amp;n=12
    504     *
    505     * @return A color array.
    506     */
    507    public static Color[] getBrewerQualitativePairedN12Colors() {
    508        Color[] result = new Color[12];
    509        result[0] = new Color(166, 206, 227);
    510        result[1] = new Color(31, 120, 180);
    511        result[2] = new Color(178, 223, 138);
    512        result[3] = new Color(51, 160, 44);
    513        result[4] = new Color(251, 154, 153);
    514        result[5] = new Color(227, 26, 28);
    515        result[6] = new Color(253, 191, 111);
    516        result[7] = new Color(255, 127, 0);
    517        result[8] = new Color(202, 178, 214);
    518        result[9] = new Color(106, 61, 154);
    519        result[10] = new Color(255, 255, 153);
    520        result[11] = new Color(177, 89, 40);
    521        return result;
    522    }
    523
    524    /**
    525     * Returns a newly created array containing 11 colors from the the
    526     * ColorBrewer tool.  Good for pie charts and bar charts, not so good for
    527     * scatter plots.
    528     *
    529     * http://colorbrewer2.org/?type=qualitative&amp;scheme=Set3&amp;n=12
    530     *
    531     * @return A color array.
    532     */
    533    public static Color[] getBrewerQualitativeSet3N12Colors() {
    534        Color[] result = new Color[12];
    535        result[0] = new Color(141, 211, 199);
    536        result[1] = new Color(255, 255, 179);
    537        result[2] = new Color(190, 186, 218);
    538        result[3] = new Color(251, 128, 114);
    539        result[4] = new Color(128, 177, 211);
    540        result[5] = new Color(253, 180, 98);
    541        result[6] = new Color(179, 222, 105);
    542        result[7] = new Color(252, 205, 229);
    543        result[8] = new Color(217, 217, 217);
    544        result[9] = new Color(188, 128, 189);
    545        result[10] = new Color(204, 235, 197);
    546        result[11] = new Color(255, 237, 111);
    547        return result;
    548    }
    549
    550    /**
    551     * Returns a set of colors sourced from
    552     * http://www.sapdesignguild.org/goodies/diagram_guidelines/index.html.
    553     *
    554     * @return A color array.
    555     */
    556    public static Color[] getSAPMultiColor() {
    557        return new Color[] {
    558            new Color(255, 248, 163),
    559            new Color(169, 204, 143),
    560            new Color(178, 200, 217),
    561            new Color(190, 163, 122),
    562            new Color(243, 170, 121),
    563            new Color(181, 181, 169),
    564            new Color(230, 165, 164),
    565            new Color(248, 215, 83),
    566            new Color(92, 151, 70),
    567            new Color(62, 117, 167),
    568            new Color(122, 101, 62),
    569            new Color(225, 102, 42),
    570            new Color(116, 121, 111),
    571            new Color(196, 56, 79)
    572        };
    573    }
    574
    575    /**
    576     * Returns an array of four colors.
    577     *
    578     * @return An array of four colors.
    579     */
    580    public static Color[] getColors1() {
    581        return new Color[] { new Color(0, 55, 122),
    582            new Color(24, 123, 58), Color.RED, Color.YELLOW };
    583    }
    584
    585    /**
    586     * Returns an array of four colors.
    587     *
    588     * @return An array of four colors.
    589     */
    590    public static Color[] getColors2() {
    591        return new Color[] {new Color(0x1A9641), new Color(0xA6D96A),
    592                    new Color(0xFDAE61), new Color(0xFFFFBF)};
    593    }
    594
    595    /**
    596     * Returns an array of six colors
    597     * (source: http://blog.design-seeds.com/generating-color/).
    598     *
    599     * @return An array of six colors.
    600     */
    601    public static Color[] getDesignSeedsShells() {
    602        return new Color[] {
    603            new Color(228, 233, 239),
    604            new Color(184, 197, 219),
    605            new Color(111, 122, 143),
    606            new Color(95, 89, 89),
    607            new Color(206, 167, 145),
    608            new Color(188, 182, 173)
    609        };
    610    }
    611
    612    /**
    613     * Returns an array of six colors
    614     * (source: http://blog.design-seeds.com/generating-color/).
    615     *
    616     * @return An array of six colors.
    617     */
    618    public static Color[] getDesignSeedsPepper() {
    619        return new Color[] {
    620            new Color(255, 219, 142),
    621            new Color(220, 21, 20),
    622            new Color(149, 0, 1),
    623            new Color(82, 102, 41),
    624            new Color(142, 101, 72),
    625            new Color(199, 169, 128)
    626        };
    627    }
    628}