2017-02-15 6 views
0

해당 라벨에 해당하는 덴도 그램의 라인 색상을 변경하고 싶습니다. 그러나, 나는 전에 그런 것을 보지 못했습니다. 그래서 적어도 텍스트 라벨의 색상을 변경하고 싶습니다.덴도 그램 플롯의 라벨 및 라인 색상 지정

+0

은 바람직하게는 원하는 출력의 일러스트와 함께, 당신의 정확한 필요로 질문을 명확히하십시오. – EBH

답변

1

간단한 해결책이없는 것처럼 보입니다. dendrogram의 레이블은 단순히 y 축 눈금 레이블이며 모두 동일한 color 속성을 공유합니다. 반면에 선은 집합으로 구성되지 않으므로 인접한 노드 사이를 연결하는 모든 선은 하나의 객체입니다. 다음 예는 모든 것을 보여

color dend

이제 문제는 색상으로 라인에 대한 특정 목적이 무엇입니까? 주로 수직선으로 무엇을하고 싶습니까?


색칠 lables

이 woraround의 아이디어는 텍스트에 의해 모든 lables를 대체하는 것입니다, 그래서 그들은 saparetly 색깔의 수 :

ax = gca; % get the axes handle 
lab = ax.YAxis.TickLabels; % get all the labels 
loc = ax.YAxis.TickValues; % get all labels location 
[ulab,~,lab_ind] = unique(lab); % find all unique labels 
clr = lines(numel(ulab)); % make a color map 
for k = 1:numel(ulab) % for every type of lable 
    ind = strcmp(ulab{k},lab); % find all instances in lab 
    x = repelem(ax.XAxis.Limits(1)-0.01,sum(ind)); % make an x position vector 
    % place this lable at the same locations with a distinct color: 
    text(x,loc(ind),lab(ind),'Color',clr(k,:)); 
end 
ax.YAxis.TickLabels = []; % remove the original labels 
% replace the original labels with white space, to keep the axes position: 
ax.YAxis.TickLabels = repelem(' ',max(cellfun(@numel,lab))); 

color dend lables


첫 번째 수준의 줄을 색칠

아이디어는 비슷합니다 - 현재 줄 위에 레이블의 동일한 색상으로 한 줄을 배치하십시오. 노드는 나중에 처리됩니다. 그래서 당신은하지 않습니다,

ax = gca; % get the axes handle 
X = get(ax.Children,'XData'); % Get x values of all lines 
Y = get(ax.Children,'YData'); % Get y values of all lines 

이 (당신도 그렇게하도록 선택하는 경우) 컬러 라벨을 추가하기 전에 수행해야합니다 :

첫째, 우리는 그림에서 모든 좌표 데이터를 수집해야 오류가 발생합니다.

그런 다음 y 축 틱 값 (즉, 정수 y 데이터 있음)에 배치 된 경우 선을 반복하여 색칠 할 수 있습니다. 리콜 각 line 객체가 기본적으로 3 개 연결 라인이다 (그리고 미리 알림에 대한 picture above 볼), 그래서 우리는 첫 번째와 마지막 줄에보고 싶은 :

for k = 1:numel(Y) 
    if Y{k}(1)==fix(Y{k}(1)) 
     line(ax,X{k}(1:2),Y{k}(1:2),'Color',clr(lab_ind(Y{k}(1)),:),... 
      'LineWidth',2); 
    end 
    if Y{k}(3)==fix(Y{k}(3)) 
     line(ax,X{k}(3:4),Y{k}(3:4),'Color',clr(lab_ind(Y{k}(3)),:),... 
      'LineWidth',2); 
    end 
end 

clrlab_ind 위의 코드에서 가져옵니다 (레이블 용), 선을 명확하게하기 위해 약간 더 두껍게 만들었습니다.

결과는 다음과 같습니다

color dend 2

+0

안녕하세요. 고마워요. 색소 라벨은 제가 찾고있는 것입니다. 선들이 라벨과 같은 색깔을 지니게하는 것이 가능한가? – Excalibur

+0

@Excalibur 내가 위에서 쓴 것처럼 선을 채색하여 무엇을 의미하는지 더 엄격하게 정의해야합니다. 가장 좋은 방법은 생각을 설명하는 몇 가지 예를 제시하는 것입니다. 어쨌든 라벨을 색칠하는 것이 더 복잡 할 것입니다. – EBH

+0

예를 들어, 두 번째 그림에서 처음 세 줄은 주황색입니다. 네 번째 줄 파란색; 다섯 번째 노란색; 여섯 번째 보라색 등등. 두 선이 같은 색으로 병합되면 병합 후 선은 그 색을 유지합니다.두 줄의 색이 다른 경우 병합 후 줄이 검은 색이됩니다. 다시 한 번 감사드립니다! – Excalibur