Boxplot with multiline x axis labels
    12 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
Hello,
I'm trying to create a boxplot for two groups. Each group's label is multi line. I have tried the approach below, but the first line of each label is drawn on top of the x axis, while the second is drawn below the x axis (please try the code below)
Does anyone know how to make the two lines be drawn below the x axis in a boxplot?
Thanks
%%%%%%%%%%%
Dist1 = rand(10, 1); 
Dist2 = rand(10, 1); 
group = [repmat(cellstr(sprintf('First Line G1\nSecond Line G1')), length(Dist1), 1); ... 
         repmat(cellstr(sprintf('First Line G2\nSecond Line G2')), length(Dist2), 1)]; 
figurePlot = figure('visible', 'on'); 
boxplot([Dist1;Dist2], group) 
ylabel('Y Label');
0 Kommentare
Akzeptierte Antwort
  Fangjun Jiang
      
      
 am 4 Okt. 2011
        After your plot, use findobj() to find the handles of the two labels and then change the position.
h=findobj(gca,'type','text');
char(get(h,'String'))
get(h,'Position')
ans =
First Line G2 
Second Line G2
First Line G1 
Second Line G1
ans = 
      [1x3 double]
      [1x3 double]
6 Kommentare
  Fangjun Jiang
      
      
 am 4 Okt. 2011
				I had the same problem using saveas() or print(). Walter's suggestion is probably the best option. However, I can't test it at this moment.
  Fangjun Jiang
      
      
 am 5 Okt. 2011
				I used Tex formatting but it still shows the first line label above the x-axis. So it still requires changing the position to move it down. Then when using saveas(), the label still moves up. Please post another question using the following code, there might be experts on graphics who can help you.
Dist1 = rand(10, 1); 
Dist2 = rand(10, 1); 
group = [repmat({'First Line G1\newlineSecond Line G1'}, length(Dist1), 1); ... 
 repmat({'First Line G2\newlineSecond Line G2'}, length(Dist2), 1)]; 
figurePlot = figure('visible', 'on'); 
boxplot([Dist1;Dist2], group) 
ylabel('Y Label'); grid;
h=findobj(gca,'type','text'); 
set(h,'Interpreter','tex')
set(h(1),'Position',get(h(1),'Position')-10); 
set(h(2),'Position',get(h(2),'Position')-10);
saveas(figurePlot,'test.png'); 
Weitere Antworten (1)
  Walter Roberson
      
      
 am 4 Okt. 2011
        Using string with newlines in them is not promised to work for any of the MATLAB graphical text operations that I can think of at the moment.
Some graphical operations permit character arrays with multiple rows; some graphical operations permit strings with the lines separated by '|'; some graphical operations permit cell arrays of strings; some permit TeX or LaTeX that include coded indications of line breaks. And some graphical text operations just plain only permit single lines. Sometimes the easiest way to work around the matter is to go in to the object (e.g., axes) properties and bash the usual text object handle to be an annotation object handle.
4 Kommentare
  Walter Roberson
      
      
 am 4 Okt. 2011
				Did you perhaps miss the sprintf('....\n...') ? That creates a character vector with the \n replaced by char(10) and does *not* create two rows of characters.
  Fangjun Jiang
      
      
 am 4 Okt. 2011
				Yep. I see you point.
>> a=['abc';'efg'];
A=cellstr(a)
b=sprintf('abc\nefg');
B=cellstr(b)
A = 
 'abc'
 'efg'
B = 
 [1x7 char]
Siehe auch
Kategorien
				Mehr zu Labels and Annotations finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


