2017-03-09 2 views
1

Ich schreibe eine Plot Automation Routine für Matlab. Allerdings habe ich Probleme, die (horizontale) Größe der Farbbalken zu beurteilen. Ich kann den folgenden verwenden, um die Größe des colorbar zu bekommen:Erhalten Sie die volle Größe der Farbleiste in Matlab

cb = findall(groot,'Type','colorbar'); % get colorbar 
xwidth = cb.Position(3); 

Das gibt mir die horizontale Größe des colorbar, aber SCHLIESST und Warnschilder kreuzen.

Haben Sie eine Idee, wie Sie die volle Größe des Balkens und der Etiketten erhalten?

Vielen Dank im Voraus

+0

Welche Version von MATLAB? – Suever

+0

@Suever: 2017a prerelease – TheodorBecker

+0

Im Allgemeinen ist es am besten, keine Fragen in einem öffentlichen Forum über Pre-Release-Software aufgrund der Vertraulichkeit zu stellen. Diese Frage bezieht sich jedoch auf alle Versionen von MATLAB nach R2014b. – Suever

Antwort

1

In Versionen von MATLAB vor R2014b, ein colorbar war einfach ein axes Objekt in der Verkleidung, so dass Sie bequem die OuterPosition Eigenschaft des colorbar zu bekommen die Position des colorbar (einschließlich Etiketten verwenden könnten und Tick ​​Etiketten). In R2014b ist die Farbleiste jedoch ein eigenes Grafikobjekt und die darunter liegenden Achsen sind nicht mehr zugänglich.

Eine mögliche Abhilfe ist ein unsichtbares axes Objekt auf dem colorbar (das hat die gleichen Strichmarkierungen und Etiketten) zu erstellen und die OuterPosition von dass bekommen.

function pos = getColorbarPosition(cb) 

    tmp = axes('Position', cb.Position, 'YAxisLocation', 'right', ... 
      'YLim', cb.Limits, 'FontSize', cb.FontSize, 'Units', cb.Units, ... 
      'FontWeight', cb.FontWeight, 'Visible', 'off', ... 
      'FontName', cb.FontName, 'YTick', cb.Ticks, ... 
      'YTickLabels', cb.TickLabels, 'XTick', []); 

    if ~isempty(cb.Label) 
     ylabel(tmp, cb.Label.String, 'FontSize', cb.Label.FontSize, ... 
     'FontWeight', cb.Label.FontWeight, 'FontWeight', cb.Label.FontWeight) 
    end 

    pos = get(tmp, 'OuterPosition'); 

    delete(tmp); 
end 
+0

Ich habe schon eine etwas längere Umgehungslösung erwartet, aber das funktioniert für mich, vielen Dank! – TheodorBecker

Verwandte Themen