수색…


비고

  • 문서화되지 않은 기능을 사용하는 것은 위험한 실행 1 로 간주됩니다. 이러한 기능은 예고없이 변경되거나 다른 MATLAB 버전에서 다르게 작동하기 때문입니다. 이러한 이유로 문서화 된 대체물이 포함 된 try/catch 블록 내에 문서화되지 않은 코드를 포함하는 것과 같은 방어 프로그래밍 기법을 사용하는 것이 좋습니다.

C ++ 호환 도우미 함수

Matlab Coder를 사용하면 C ++과 호환되지 않는 경우 매우 일반적인 함수 사용을 거부하는 경우가 있습니다. 대체로 문서화되지 않은 도우미 함수 가 대체로 사용될 수 있습니다.

다음은 지원되는 기능의 전체 목록입니다. .

지원되지 않는 기능에 대한 대안 모음을 따를 경우 다음과 같습니다.


함수 sprintfsprintfc 는 매우 유사하며, 전자는 문자 배열을 반환하고, 후자는 셀 문자열을 반환 합니다 .

 str = sprintf('%i',x)   % returns '5' for x = 5
 str = sprintfc('%i',x)  % returns {'5'} for x = 5

그러나 sprintfc 는 Matlab Coder에서 지원하는 C ++과 호환되며 sprintf 는 지원되지 않습니다.

3 차원에서 색상 데이터가있는 색상으로 구분 된 2D 선 그림

이전 HG1 그래픽 엔진을 사용하는 R2014b 이전의 MATLAB 버전에서는 색상이 지정된 2D 라인 플롯 을 작성하는 방법이 명확하지 않았습니다. 새로운 HG2 그래픽 엔진이 출시됨 에 따라 Yair Altman이 소개 한 새로운 문서화되지 않은 기능 이 생겼습니다.

n = 100;
x = linspace(-10,10,n); y = x.^2;
p = plot(x,y,'r', 'LineWidth',5);

% modified jet-colormap
cd = [uint8(jet(n)*255) uint8(ones(n,1))].';

drawnow
set(p.Edge, 'ColorBinding','interpolated', 'ColorData',cd)

라인 플롯

선 및 산점도의 반투명 마커

Matlab R2014b 이후 Yair Altman이 도입 한 문서화되지 않은 기능을 사용하여 라인 및 분산 플롯에 반투명 마커를 쉽게 구현할 수 있습니다.

기본적인 아이디어는 마커의 숨겨진 핸들을 가져 EdgeColorData 원하는 투명도를 얻기 위해 EdgeColorData 의 마지막 값에 <1 을 적용하는 것입니다.

여기에 우리는 scatter 위해갑니다 :

%// example data
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);

%// plot scatter, get handle
h = scatter(x,y); 
drawnow; %// important

%// get marker handle
hMarkers = h.MarkerHandle; 

%// get current edge and face color
edgeColor = hMarkers.EdgeColorData
faceColor = hMarkers.FaceColorData

%// set face color to the same as edge color
faceColor = edgeColor;

%// opacity
opa = 0.3;

%// set marker edge and face color
hMarkers.EdgeColorData = uint8( [edgeColor(1:3); 255*opa] ); 
hMarkers.FaceColorData = uint8( [faceColor(1:3); 255*opa] ); 

여기에 이미지 설명을 입력하십시오.

plot

%// example data
x = linspace(0,3*pi,200);
y1 = cos(x);
y2 = sin(x);

%// plot scatter, get handle
h1 = plot(x,y1,'o-','MarkerSize',15); hold on
h2 = plot(x,y2,'o-','MarkerSize',15); 
drawnow; %// important

%// get marker handle
h1Markers = h1.MarkerHandle; 
h2Markers = h2.MarkerHandle; 

%// get current edge and face color
edgeColor1 = h1Markers.EdgeColorData;
edgeColor2 = h2Markers.EdgeColorData;

%// set face color to the same as edge color
faceColor1 = edgeColor1;
faceColor2 = edgeColor2;

%// opacity
opa = 0.3;

%// set marker edge and face color
h1Markers.EdgeColorData = uint8( [edgeColor1(1:3); 255*opa] ); 
h1Markers.FaceColorData = uint8( [faceColor1(1:3); 255*opa] ); 
h2Markers.EdgeColorData = uint8( [edgeColor2(1:3); 255*opa] ); 
h2Markers.FaceColorData = uint8( [faceColor2(1:3); 255*opa] ); 

여기에 이미지 설명을 입력하십시오.

조작에 사용되는 마커 핸들이 그림과 함께 만들어집니다. drawnow 명령은 후속 명령이 호출되기 전에 그림의 생성을 보장하고 지연시 오류를 방지합니다.

윤곽 플롯 - 텍스트 레이블 사용자 정의

등고선에 레이블을 표시 할 때 Matlab에서는 과학 표기법으로 변경하는 등 숫자의 형식을 제어 할 수 없습니다.

개별 텍스트 객체는 일반 텍스트 객체이지만 가져 오는 방법은 문서화되어 있지 않습니다. 컨투어 핸들의 TextPrims 속성에서 해당 TextPrims 액세스합니다.

  figure
  [X,Y]=meshgrid(0:100,0:100);
  Z=(X+Y.^2)*1e10;
  [C,h]=contour(X,Y,Z);
  h.ShowText='on';
  drawnow();
  txt = get(h,'TextPrims');
  v = str2double(get(txt,'String'));
  for ii=1:length(v)
    set(txt(ii),'String',sprintf('%0.3e',v(ii)))
  end

: drawnow 명령을 추가하여 Matlab이 윤곽선을 그려야하는 경우 윤곽선이 실제로 그려지는 경우에만 텍스트 객체의 수와 위치가 결정되므로 텍스트 객체 만 생성됩니다.

등고선을 그릴 때 txt 객체가 생성된다는 사실은 플롯이 다시 그려 질 때마다 다시 계산된다는 것을 의미합니다 (예 : figure resize). 이를 관리하려면 undocumented event MarkedClean 을 청취해야합니다.

function customiseContour
  figure
  [X,Y]=meshgrid(0:100,0:100);
  Z=(X+Y.^2)*1e10;
  [C,h]=contour(X,Y,Z);
  h.ShowText='on';
  % add a listener and call your new format function
  addlistener(h,'MarkedClean',@(a,b)ReFormatText(a))
end
function ReFormatText(h)
  % get all the text items from the contour
  t = get(h,'TextPrims');
  for ii=1:length(t)
    % get the current value (Matlab changes this back when it 
    %   redraws the plot)
    v = str2double(get(t(ii),'String'));
    % Update with the format you want - scientific for example
    set(t(ii),'String',sprintf('%0.3e',v));
  end
end

여기에 이미지 설명을 입력하십시오.

Windows에서 Matlab r2015b를 사용하여 테스트 한 예제

기존 범례에 항목 추가 / 추가

기존 범례는 관리하기 어려울 수 있습니다. 예를 들어 플롯에 두 개의 행이 있지만 그 중 하나에서만 범례 항목이 있고이 방법으로 유지해야하는 경우 범례 항목이있는 세 번째 행을 추가하는 것이 어려울 수 있습니다. 예:

figure
hold on
fplot(@sin)
fplot(@cos)
legend sin  % Add only a legend entry for sin
hTan = fplot(@tan);  % Make sure to get the handle, hTan, to the graphics object you want to add to the legend

tan 에 대한 legend 엔트리를 추가하고 cos 에 대해서는 엔트리를 추가하지 않기 위해 다음 라인 중 하나는 트릭을 수행하지 않습니다. 그들은 모두 어떤 식 으로든 실패합니다.

legend tangent  % Replaces current legend -> fail
legend -DynamicLegend  % Undocumented feature, adds 'cos', which shouldn't be added -> fail
legend sine tangent  % Sets cos DisplayName to 'tangent' -> fail
legend sine '' tangent  % Sets cos DisplayName, albeit empty -> fail
legend(f)

다행히도, PlotChildren 이라는 문서화되지 않은 전설적인 속성은 부모 그림 1 의 하위 PlotChildren 을 추적합니다. 따라서, 다음과 같이 PlotChildren 속성을 통해 범례의 자식을 명시 적으로 설정해야합니다.

hTan.DisplayName = 'tangent';  % Set the graphics object's display name
l = legend;
l.PlotChildren(end + 1) = hTan;  % Append the graphics handle to legend's plot children

PlotChildren 속성에서 개체를 추가하거나 제거하면 범례가 자동으로 업데이트됩니다.

1 사실 : 수치. DisplayName 속성이있는 그림의 하위 항목을 그림의 범례 (예 : 다른 하위 그림)에 추가 할 수 있습니다. 이는 범례 자체가 기본적으로 축 객체이기 때문입니다.

MATLAB R2016b에서 테스트 됨

분산 형 플롯 지터

scatter 함수에는 두 개의 문서화되지 않은 속성 인 'jitter''jitterAmount' 가있어 x 축에서만 데이터를 지터 할 수 있습니다. 이것은 Matlab 7.1 (2005)으로 거슬러 올라갑니다.

이 기능을 사용하려면 'jitter' 속성을 'on' 으로 설정하고 'jitterAmount' 속성을 원하는 절대 값 (기본값은 0.2 )으로 설정하십시오.

이것은 겹치는 데이터를 시각화하고자 할 때 매우 유용합니다. 예를 들면 다음과 같습니다 :

scatter(ones(1,10), ones(1,10), 'jitter', 'on', 'jitterAmount', 0.5);

지터 중복 데이터

문서화되지 않은 Matlab 에 대해 더 자세히 읽어보십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow