2015-02-03 10 views
1

matlab의 imagesc 명령을 사용하여 큰 히트 맵을 만들었습니다. x 축과 y 축의 각 값 조합에 대한 오류 출력을 그립니다. 그림에서 알 수 있듯이 너무 많은 축 라벨이 있습니다. x 축과 y 축 모두에서 점의 수를 늘리려고하면 더 밀도가 높아질 수 있습니다. 즉 더 세밀한 격자에서 더 많은 출력을 얻습니다.imagesc가있는 플롯에서 일부 축 레이블 건너 뛰기

레이블이 유연하고 일부를 건너 뛰고 싶습니다. 나는 X와 Y 모두를 위해서 이것을하고 싶다. 나는 또한 "진드기"에 융통성을 발휘하여 그들 모두를 그려 내고, 아니면 그 중 일부를 건너 뛰기를 원한다. X와 Y 값은 순서대로 증가하지 않는다는 것을 명심하십시오. 처음에 증가량은 9 포인트에 대해 0.01이고, 그 다음에 0.1, 1 또는 3 등입니다. 나는이 증분을 또한 바꿀 것이다.

그래프를 두 번째 이미지처럼 보이고 싶습니다. 빨간색 상자에만 표시된 레이블을 대략 알고 싶습니다. 내가 말했듯이 이것들은 설정된 값이 아니며, 더 작은 플롯으로 이어지는 증가분을 더 작게 만들 것입니다.

도움 주셔서 감사합니다.

enter image description here

enter image description here

OS : 윈도우 7, 8 (64 비트)

매트랩 버전 : matlab에 2014이

답변

1

당신은이 같은 진드기와 라벨을 조작 할 수 있습니다 :

ticksarray=[1 33 41 100 ...] % edit these to whatever you want 
tickslabels={'1', '33', '41', '100'; ...} % match the size of both arrays 

set(gca,'XTick',ticksarray) 
set(gca,'XTickLabel',tickslabels) 

동일한 t 힌지가 y 축에 적용됩니다.


작은 작업 예 :

x=1:100; 
y=2*x.^2-3*x+2; 

plot(x,y) 

ticksarray=[1 33 41 100]; 
tickslabels={'1', '33', '41', '100'}; 

set(gca,'XTick',ticksarray) 
set(gca,'XTickLabel',tickslabels) 

resulting graph

1

예 : 두 축마다 라벨의 최대 수를 설정할 수 있습니다

이제
figure(1) 
load clown 

subplot(211) 
imagesc(X); 

subplot(212) 
imagesc(X); 
h = gca; 

:

%// define maximum number of labels 
maxLabel = 3; 
h.XTick = linspace(h.xlim(1),h.xlim(2),maxLabel); 
h.YTick = linspace(h.ylim(1),h.ylim(2),maxLabel); 

enter image description here

또는 생략되어야하는 레이블을 정의합니다

%// define number of labels to skip 
skipLabel = 2; 
h.XTick = h.XTick(1:skipLabel:end); 
h.YTick = h.YTick(1:skipLabel:end) 

enter image description here


당신은 또한 비록 더 복잡 진드기와 라벨의 다른 번호를 얻을 수 있습니다 :

maxLabel = 3; 
maxTicks = 6; 
h.XTick = linspace(h.xlim(1),h.xlim(2),maxTicks); 
h.YTick = linspace(h.ylim(1),h.ylim(2),maxTicks); 
h.XTickLabel(setdiff(1:maxTicks, 1:maxTicks/maxLabel:maxTicks)) = repmat({''},1,maxTicks-maxLabel); 
h.YTickLabel(setdiff(1:maxTicks, 1:maxTicks/maxLabel:maxTicks)) = repmat({''},1,maxTicks-maxLabel); 
당신의 MATLAB 2014b의 이전 버전을 사용하는 경우

, 당신은 모든 속성을 설정 set 명령을해야합니다

%// define maximum number of labels 
maxLabel = 3; 
Xlim = get(h,'Xlim'); 
Ylim = get(h,'Ylim'); 
set(h,'XTick', linspace(Xlim(1),Xlim(2),maxLabel)); 
set(h,'YTick', linspace(Ylim(1),Ylim(2),maxLabel)); 

%// or define number of labels to skip 
skipLabel = 2; 
XTick = get(h,'XTick'); 
YTick = get(h,'YTick'); 
set(h,'XTick', XTick(1:skipLabel:end)); 
set(h,'YTick', YTick(1:skipLabel:end)); 

%// or combined 
maxLabel = 3; 
maxTicks = 6; 
Xlim = get(h,'Xlim'); 
Ylim = get(h,'Ylim'); 
set(h,'XTick', linspace(Xlim(1),Xlim(2),maxTicks)); 
set(h,'YTick', linspace(Ylim(1),Ylim(2),maxTicks)); 
XTickLabel = cellstr(get(h,'XTickLabel')); 
YTickLabel = cellstr(get(h,'YTickLabel')); 
XTickLabel(setdiff(1:maxTicks, 1:maxTicks/maxLabel:maxTicks),:) = repmat({''},1,maxTicks-maxLabel); 
YTickLabel(setdiff(1:maxTicks, 1:maxTicks/maxLabel:maxTicks),:) = repmat({''},1,maxTicks-maxLabel); 
set(h,'XTickLabel',XTickLabel); 
set(h,'YTickLabel',YTickLabel); 
+0

나는 내가 matlab에 2014a를 사용하는 얘기를 깜빡 했네요 죄송합니다. 각 "h"에 대해 set 명령을 사용해야합니까? 네가 사용한 노테이션. ? – ilyas

+0

@ilyas 예. 작동합니까? – thewaywewalk

+0

2014b에서 구조가 크게 바뀌 었음을 알았습니다. 이제는 더 직관적 인 것처럼 보입니다. 그러나 2014a를 사용하고 지적한대로 '설정'을 처리해야합니다. 시간이 있다면 2014a 버전에 대해 동일한 솔루션을 게시 할 수 있습니다. 나는 그것을 매우 감사 할 것이다. 나는 그것의 대부분을 알아 냈다. 그러나 단지 확실하게하고 싶다. – ilyas

0

@thewaywewalk에 의해 제안 된 두 번째 방법을 적용한 후 나는 아래 두 번째 그림을 얻었다. 외관상으로는 상표는 구조가 있어야한다, 왜냐하면 그들은 단지 많은 레이블을 가지고 있기 때문이다.

The figure after applying the skiplabel method

The figure from imagesc

그러면 I는 다음과 같이 라벨을 조작하려고 시도하고, 세번째 이미지를 얻었다.
  skipLabel = 2; 
      XTick = get(h,'XTick'); 
      YTick = get(h,'YTick'); 
      set(h,'XTick', XTick(1:skipLabel:end)); 
      set(h,'YTick', YTick(1:skipLabel:end)); 

      XTickLabel = get(h,'XTickLabel'); 
      labelsX = cell(length(1: skipLabel:length(XTick)) , 1); 
      j = 1; 
      for i = 1: skipLabel:length(XTick) 
       labelsX{j} = XTickLabel(i, :); 
       j = j + 1; 
      end 
      set(h,'XTickLabel', labelsX); 

      YTickLabel = get(h,'YTickLabel'); 
      labelsY = cell(length(1: skipLabel:length(YTick)) , 1); 
      j = 1; 
      for i = 1: skipLabel:length(YTick) 
       labelsY{j} = YTickLabel(i, :); 
       j = j + 1; 
      end 
      set(h,'YTickLabel', labelsY); 

Y 축 라벨

(오른쪽 옆에 체크하기), 그러나 X 축 레이블이 왼쪽으로 약간로 전환 될 것으로 보인다 이전과 장소에 보인다. 이 문제를 어떻게 해결할 수 있습니까?

다른 메모 : 어떻게 과학적 수치를 정상 수치로 바꿀 수 있습니까? 또한 아마도 레이블을 조작 할 때 더 나은 방법이있을 것입니다.

After changing the labels

관련 문제