2012-01-09 4 views
2

크기가 Arc2D.Pie 인 슬라이스로 변환 된 값이 있습니다 (예 : {1d,1d,2d,4d}의 배열은 4 개의 슬라이스로 구성된 그래프를 생성하며 그 중 2 개는 8 번째 그 중 하나는 네 번째를 차지하고 그 중 하나는 절반을 차지하며, 함께 조각은 완전한 원을 형성하도록 배열됩니다). 슬라이스를 다른 표시기 (이름 등)에 쉽게 매핑 할 수 있도록하고 각성을 방지하기 위해 이러한 슬라이스 각각은 다르게 색이 지정됩니다. 이 같은 특히 눈에 띄는 같은 시안 대부분의 색상 (빨간색과 파란색, 몇 가지 이름), 일부 (잘 작동하는 동안,자바 : 더 나은 색상 선택 알고리즘

public Color getColor(int index, int total) { 
    return Color.getHSBColor((float) index/(float) total, 1f, 1f); 
} 

그러나 :

색상을 선택하는

내 알고리즘은 초기에 아주 간단했다 두 세트의 두 번째 요소, 예 : {1d, 3d}의 배열)은 너무 가볍기 때문에 육안으로 쉽게 볼 수 없습니다.

나는 이후 색상을 어둡게하는 시도에

return Color.getHSBColor((float) index/(float) total, 1f, 0.8f); 

에 알고리즘을 변경; 그러나 시안 색은 여전히보기 힘들고 밝기를 낮추면 색을 구별하기가 어려워집니다.

누구나 쉽게 볼 수있는 색상의 스펙트럼을 생성하는 좋은, 바람직하게는 간단한 알고리즘을 갖고 있습니까? 좋은 테스트는 황색과 녹색의 색상을 생성하고 흰색 배경에서 쉽게 볼 수 있는지 확인하는 것입니다.

감사합니다.

WC

편집 : 지금 채도 및 밝기를 변화시킴으로써,보다 다양한 색상을 만들어 내 알고리즘을 개선했다. 색상이 잘 보이지 않습니다. 더 이상 아이디어가 없습니까?

새로운 알고리즘 :

float hue = (float) seriesIndex/(float) totalSeries; 
int steps = 4; 
float saturation = ((seriesIndex) % steps/(2f * steps)) + (0.5f); 
float brightness = ((seriesIndex + ((steps + 1)/2f)) % (steps + 1f)/(2f * (steps + 1f))) + 0.5f; 
Color c = Color.getHSBColor(hue, saturation, brightness); 

답변

1

지금까지 발견 한 알고리즘 중 a previous SO algorithm은 수정 한 것입니다. 나는 MIX을 일정한 연한 회색 (Color.LIGHT_GRAY)으로 유지하고 시드 된 Random 개체를 사용하여 색상이 각 반복마다 동일하지만 그 사이에서 항상 동일하도록합니다.

Random random = new Random(seriesIndex); 
int red = random.nextInt(256); 
int green = random.nextInt(256); 
int blue = random.nextInt(256); 

// mix the color 
if (MIX != null) { 
    red = (red + MIX.getRed())/2; 
    green = (green + MIX.getGreen())/2; 
    blue = (blue + MIX.getBlue())/2; 
} 

Color c = new Color(red, green, blue); 

상당히 눈에 잘 띄는 색상으로 밝혀졌습니다. 날이 문제를 해결 도움이 나에게 아이디어를 제공하고, 올바른 방향으로 날을 가리키는위한 nmjohn

Example image

감사합니다!

WC

참고 : 나는 이틀 동안이 열린 상태로 있습니다. 누구든지 더 좋은 알고리즘을 생각해 내면, 나는 그를 받아 들일 것이다. 그렇지 않으면, 나는 이것을 받아 들일 것이다.

1

내가 좋아하는 그레이 스케일은

Color.rgb(255 * (float)index/(float)total, 255 * (float)index/(float)total, 255 *  (float)index/(float)total); 

그렇지 않으면, 컬러 분할의 분야는 매우 큽니다. 어떤 사람들은 밴드로 헤어질 수 있습니다.

그렇지 않으면 네 가지 색상 만 있으면 테이블에서 선택할 수있는 빨강, 파랑, 녹색 및 검정 등의 색상을 선택합니다.

+0

예, 이것은 소량의 경우에 매우 유용하지만 한 번 지나면 15 개 항목을 지나치게 조금 어지럽게 보입니다. "색상 세분화"란 무엇을 의미합니까? – wchargin

+0

나는 당신이 뚜렷하고 헷갈 리지 않는 많은 수의 색을 찾는 것으로 일반적으로 문제를 겪을 것이라고 생각한다. 색상 세분화는 여러 유형의 데이터를 알고리즘 적으로 음영 처리하기 위해 많은 필드에서 사용됩니다. 일반적으로 4 ~ 5 가지 색상 (예 : 의료용 이미징) 또는 색상이 서로 섞이도 록 (다양한 뼈의 밀도 표시) 의미가 아닙니다. 샘플 이미지를 게시 할 수 있습니까? 서로 다른 알고리즘 및 항목 수를 사용하여 어떻게 생겼는지 궁금합니다. – nmjohn

+0

나는 색맹임을 명심하십시오. 어쨌든! 5 색으로 쉽게 구별 할 수 있습니다. [link] (http://img846.imageshack.us/img846/1955/5colors.png); 10 조금 더 어렵지 만 할 수 있습니다. [link] (http://img35.imageshack.us/img35/3991/tencolorsn.png); 30, 당신은 기회를 놓치지 않습니다 : [link] (http://img820.imageshack.us/img820/8392/30colors.png). – wchargin

관련 문제