Matlab에서 surf 함수를 사용하여 3D 플롯을 표시하려고하는데 z 축에 대한 로그 스케일이 필요합니다. 그래서 여기에 내가하는 일이 있습니다.
surf(X,Y,Z)
set(gca,'zscale','log')
하지만 10 ^ (-6), 10 ^ (-5), 10 ^ (-4), ...와 같은 레이블이있는 로그 스케일로 컬러 바를 표시하고 싶습니다.
찾아 보니 해결책을 찾았습니다
h = colorbar
set(h,'YScale','log')
그러나 'YScale'
매개 변수가 더 이상 존재하지 않기 때문에 최신 버전의 Matlab 에서는 작동하지 않습니다.
어떤 생각?
감사합니다.
컬러 바 축과 레이블을 로그 스케일로 변경할 수 있어도 데이터는 여전히 로그 스케일이 아니므로 컬러 바가 이상하게 보일 것입니다. 이 문제를 해결하기 위해 컬러 바를 유지할 다른 더미 축을 제안 할 수 있습니다. 방법은 다음과 같습니다.
이것을 플롯한다고 가정 해 봅시다.
[X,Y,Z] = peaks(50);
s = surf(X,Y,Z);
set(gca,'zscale','log')
h = colorbar;
다음 단계는 컬러 바 삽입 후 축 위치를 가져 오는 것입니다 (향후 사용을 위해).
axpos = s.Parent.Position;
이제 새 축을 만들고 숨기고 첫 번째 축과 동일한 위치에 컬러 바를 추가합니다.
axes;
axis off
cb = colorbar('Position',h.Position);
다음으로 콜로 바 축을 플롯에 표시되는 값으로 조정합니다 ( Z<=0
표시되지 않기 때문에 ).
caxis(log10([min(Z(Z>0)) max(Z(:))]))
컬러 바 눈금 레이블을 로그 스케일 형식으로 변경합니다.
cb.TickLabels = sprintf('10^{%1.1f}\n',cb.Ticks);
마지막으로 첫 번째 컬러 바를 삭제하고 축 위치를 axpos
다음으로 다시 설정합니다 .
delete(h)
set(s.Parent,'Position',axpos)
그리고 우리는 :
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다