/* Copyright 2008-2010 Gephi Authors : Mathieu Bastian <mathieu.bastian@gephi.org> Website : http://www.gephi.org This file is part of Gephi. Gephi is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gephi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Gephi. If not, see <http://www.gnu.org/licenses/>. */ package org.gephi.utils; import java.awt.Color; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Random; /** * * @author Mathieu Bastian */ public class PaletteUtils { /** * Return different colors * @param num * @return */ public static List<Color> getSequenceColors(int num) { List<Color> colors = new LinkedList<Color>(); //On choisit H et S au random Random random = new Random(); float B = random.nextFloat() * 2 / 5f + 0.6f; // 0.6 <= B < 1 float S = random.nextFloat() * 2 / 5f + 0.6f; // 0.6 <= S < 1 //System.out.println("B : "+B+" S : "+S); for (int i = 1; i <= num; i++) { float H = i / (float) num; //System.out.println(H); Color c = Color.getHSBColor(H, S, B); colors.add(c); } Collections.shuffle(colors); return colors; } public static Palette[] getSequencialPalettes() { Palette p1 = new Palette(new Color(0xEDF8FB), new Color(0xB2E2E2), new Color(0x66C2A4), new Color(0x2CA25F), new Color(0x006D2C)); Palette p2 = new Palette(new Color(0xEDF8FB), new Color(0xB3CDE3), new Color(0x8C96C6), new Color(0x8856A7), new Color(0x810F7C)); Palette p3 = new Palette(new Color(0xF0F9E8), new Color(0xBAE4BC), new Color(0x7BCCC4), new Color(0x43A2CA), new Color(0x0868AC)); Palette p4 = new Palette(new Color(0xFEF0D9), new Color(0xFDCC8A), new Color(0xFC8D59), new Color(0xE34A33), new Color(0xB30000)); Palette p5 = new Palette(new Color(0xFEEBE2), new Color(0xFBB4B9), new Color(0xF768A1), new Color(0xC51B8A), new Color(0x7A0177)); Palette p6 = new Palette(new Color(0xF1EEF6), new Color(0xBDC9E1), new Color(0x74A9CF), new Color(0x2B8CBE), new Color(0x045A8D)); Palette p7 = new Palette(new Color(0xFFFFCC), new Color(0xA1DAB4), new Color(0x41B6C4), new Color(0x2C7FB8), new Color(0x253494)); Palette p8 = new Palette(new Color(0xFFFFD4), new Color(0xFED98E), new Color(0xFE9929), new Color(0xD95F0E), new Color(0x993404)); return new Palette[]{p1, p2, p3, p4, p5, p6, p7, p8}; } public static Palette[] getDivergingPalettes() { Palette p1 = new Palette(new Color(0xA6611A), new Color(0xDFC27D), new Color(0xF5F5F5), new Color(0x80CDC1), new Color(0x018571)); Palette p2 = new Palette(new Color(0xD01C8B), new Color(0xF1B6DA), new Color(0xF7F7F7), new Color(0xB8E186), new Color(0x4DAC26)); Palette p3 = new Palette(new Color(0xE66101), new Color(0xFDB863), new Color(0xF7F7F7), new Color(0xB2ABD2), new Color(0x5E3C99)); Palette p4 = new Palette(new Color(0xCA0020), new Color(0xF4A582), new Color(0xFFFFFF), new Color(0xBABABA), new Color(0x404040)); Palette p5 = new Palette(new Color(0xD7191C), new Color(0xFDAE61), new Color(0xFFFFBF), new Color(0xABD9E9), new Color(0x2C7BB6)); return new Palette[]{p1, p2, p3, p4, p5}; } public static Palette[] getQualitativePalettes() { Palette p1 = new Palette(new Color(0xA6CEE3), new Color(0x1F78B4), new Color(0xB2DF8A), new Color(0x33A02C), new Color(0xFB9A99), new Color(0xE31A1C), new Color(0xFDBF6F), new Color(0xFF7F00), new Color(0xCAB2D6)); Palette p2 = new Palette(new Color(0xFBB4AE), new Color(0xB3CDE3), new Color(0xCCEBC5), new Color(0xDECBE4), new Color(0xFED9A6), new Color(0xFFFFCC), new Color(0xE5D8BD), new Color(0xFDDAEC), new Color(0xF2F2F2)); Palette p3 = new Palette(new Color(0xE41A1C), new Color(0x377EB8), new Color(0x4DAF4A), new Color(0x984EA3), new Color(0xFF7F00), new Color(0xFFFF33), new Color(0xA65628), new Color(0xF781BF), new Color(0x999999)); Palette p4 = new Palette(new Color(0x8DD3C7), new Color(0xFFFFB3), new Color(0xBEBADA), new Color(0xFB8072), new Color(0x80B1D3), new Color(0xFDB462), new Color(0xB3DE69), new Color(0xFCCDE5), new Color(0xD9D9D9)); return new Palette[]{p1, p2, p3, p4}; } public static Palette get3ClassPalette(Palette palette) { if (palette.colors.length == 5) { return new Palette(new Color[]{palette.colors[0], palette.colors[2], palette.colors[4]}); } return palette; } public static Palette reversePalette(Palette palette) { Color[] c = new Color[palette.colors.length]; for (int i = 0; i < palette.getColors().length; i++) { c[c.length - 1 - i] = palette.colors[i]; } return new Palette(c); } public static class Palette { private Color colors[]; public Palette(Color... colors) { this.colors = colors; } public Color[] getColors() { return colors; } public float[] getPositions() { float[] pos = new float[colors.length]; for (int i = 0; i < pos.length; i++) { pos[i] = i / (float) (pos.length - 1); } return pos; } } }