我想生成随机颜色,这在饼图中很有吸引力。当涉及到GUI时,我的意识很差。任何人都可以帮助编写一个功能,产生6种颜色可能看起来很好的馅饼以随机顺序排列图表。现在我已经硬编码了。但我不喜欢那些颜色。请帮助我。
plot.setSectionPaint("iPhone 2G", new Color(200, 255, 255));
plot.setSectionPaint("iPhone 3G", new Color(200, 200, 255));
答案 0 :(得分:7)
我建议您使用 color charts 中的一组颜色,而不是尝试生成随机颜色。
您为graphs and charts制作了一些表格颜色。
alt text http://www.sapdesignguild.org/goodies/diagram_guidelines/PALETTES/PALETTE1.GIF
另见 Recommendations for Charts and Graphics
(来源:sapdesignguild.org)
答案 1 :(得分:6)
我的建议是不要生成随机颜色有两个原因。首先,你必须采取额外的步骤,以确保两种或多种颜色不太相似。其次,颜色是情绪化的。你不希望你的“这个图表告诉我一切都很好”颜色要鲜红。红色是警示色;橙色和黄色也是如此。
图表中带颜色的一般建议是对一般数据使用不饱和颜色,为要引起注意的数据使用更亮的颜色。我不确定你的确切用例,但如果你想引起人们对特别高的iPhone 3GS销售的关注,你可能想要使用更亮的颜色,如果它超过一定的阈值。
作为入门手段,我会使用VonC's answer中的颜色图表来手工挑选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 ) );
}
}
}