2

我想生成可以在饼图中吸引人的随机颜色。我对 GUI 的感觉很差。任何人都可以帮助编写一个函数来生成 6 种好的颜色,这些颜色在饼图中可能看起来不错随机顺序。现在我已经硬编码了。但我不喜欢那些颜色。请帮帮我。

plot.setSectionPaint("iPhone 2G", new Color(200, 255, 255));
plot.setSectionPaint("iPhone 3G", new Color(200, 200, 255));
4

2 回答 2

7

我建议不要尝试生成随机颜色,而是使用一些颜色图表中的一组颜色。

您有一些为图形和图表制作的表格颜色。

替代文字 http://www.sapdesignguild.org/goodies/diagram_guidelines/PALETTES/PALETTE1.GIF

另请参阅有关图表和图形的建议

替代文字
(来源:sapdesignguild.org

于 2009-07-06T18:14:13.777 回答
6

我的建议是不要生成随机颜色,原因有两个。首先,您必须采取额外的步骤来确保两种或多种颜色不会过于相似。其次,颜色是情绪化的。你不希望你的“这张图表告诉我一切都很好”的颜色是鲜红色。红色是警戒色;橙色和黄色也是如此。

在图表中使用颜色的一般建议是对一般数据使用不饱和的颜色,而对您想要引起注意的数据使用更亮的颜色。我不确定您的确切用例,但如果您想引起对 iPhone 3GS 销量异常高的关注,您可能需要在超过某个阈值时使用更亮的颜色。

作为入门的一种方式,我会使用VonC 答案中的颜色图表来手工挑选 5 种左右的颜色。您不应该在单个图表上显示太多不同的颜色,因为这将是查看者有效接收的太多数据。如果图表上有超过 7 个左右的数据集,那么很有可能您没有显示正确的图表!(但那是另一个故事……)

确保您选择的颜色之间没有冲突,并将它们排列成一个数组。现在,您每次为图表着色时都可以使用一个简单的列表。

public class ChartColorSource {
    public static final Color[] COLORS;
    static {
        COLORS = new Color[ 6 ];
        COLORS[0] = new Color( ... );
        COLORS[1] = new Color( ... );
        COLORS[2] = new Color( ... );
        COLORS[3] = new Color( ... );
        COLORS[4] = new Color( ... );
        COLORS[5] = new Color( ... );
    }

    /**
     * Assign a color from the standard ones to each category
     */
    public static void colorChart( Plot plot, String[] categories ) {
        if ( categories.length > COLORS.length ) {
            // More categories than colors. Do something!
            return;
        }

        // Use the standard colors as a list so we can shuffle it and get 
        // a different order each time.
        List<Color> myColors = Arrays.asList( COLORS );
        Collections.shuffle( myColors );

        for ( int i = 0; i < categories.length; i++ ) {
            plot.setSectionPaint( categories[i], myColors.get( i ) );
        }
    }
}
于 2009-07-06T19:23:10.983 回答