Resize plot to fit text
8 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Davor Pavlovski
il 9 Dic 2019
Modificato: Adam Danz
il 9 Dic 2019
Is it possible to resize the y-axis automatically, so that my text always fits in the plot.
(as far as I can see, it is not clearly possible by using the "axis" and "ylim" functions)

3 Commenti
Risposta accettata
Adam Danz
il 9 Dic 2019
Modificato: Adam Danz
il 9 Dic 2019
- Get the extent of the text objects after plotting the text.
- Add the vertical position and height to get the upper position of each text object
- Adjust the y axis limit so it contains all text objects.
h = text(1:numel(y),y,strsplit(num2str(y)),'VerticalAlignment','bottom');
ext = cell2mat(get(h,'Extent')); % Step 1
upperPosition = sum(ext(:,[2,4]),2); % Step 2
ylim([min(ylim()),max(max(ylim()),max(upperPosition))]) % step 3
The y limit will be adjusted so that it maintains its current lower limit and increases its upper limit only if there is text that exceeds the axis boundaries.
Result

[update]
That could be reduced to one line where h is the handle to the text output.
ylim([min(ylim()), max(max(ylim()),max(cellfun(@(x)sum(x([2,4])),get(h,'Extent'))))])
It could also be put into an anonymous function where the two inputs are h and ax which are the text handles and the axis handle.
fitText = @(ax,h)ylim(ax,[min(ylim(ax)), max(max(ylim(ax)),max(cellfun(@(x)sum(x([2,4])),get(h,'Extent'))))]);
fitText(gca,h)
1 Commento
Adam Danz
il 9 Dic 2019
The full code to produce the figure, text and y limits:
clf()
y = [1.6, 1.7, 2];
bar(y)
axis tight
h = text(1:numel(y),y,strsplit(num2str(y)),'VerticalAlignment','bottom');
ext = cell2mat(get(h,'Extent')); % Step 1
upperPosition = sum(ext(:,[2,4]),2); % Step 2
ylim([min(ylim()),max(max(ylim()),max(upperPosition))]) % step 3
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Graphics Object Properties in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!