Управление размерами графов при использовании комбинирования графов - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь объединить четыре графика в Stata, используя graph combine.

Результат показан на следующем рисунке:

figure

Все четыре цифры должны быть одинакового размера, но из-за горизонтального ytitle первые двасжаты.Есть ли способ контролировать, как graph combine изменяет размеры фигур?

Я пробовал ysize и xsize, но, похоже, он перезаписан graph combine.

Ниже вы можете найти код, который генерирует фигуру:

sysuse auto, clear
graph drop _all
# delimit ;

* First 2 figures; 
twoway (line weight mpg if foreign == 1, 
        sort ytitle("Some longer ytitle",  orientation(horizontal)) 
        title("Foreign", box bexpand) yla(, ang(h))  xtitle("")
        xlabel(,noticks) name(A1, replace ) graphregion(color(gs16)));
twoway (line weight mpg if foreign == 1, sort 
        ytitle("short", orientation(horizontal)) yla(, ang(h))  xtitle("")
        xlabel(,noticks) name(A2, replace ) graphregion(color(gs16)));
graph combine A1 A2, cols(1) name(A, replace)   imargin(b=0 t=0); 

* Second 2 figures; 
twoway (line weight mpg if foreign == 0, sort ytitle("") 
        title("Domestic", box bexpand)  xtitle("") xlabel(,noticks) 
        name(B1, replace ) graphregion(color(gs16)) );
twoway  (line  weight mpg if foreign == 0, sort ytitle("")  xtitle("")
        xlabel(,noticks) name(B2, replace ) graphregion(color(gs16)));
graph combine B1 B2, cols(1) name(B, replace)   imargin(b=0 t=0); 

* Combining the two
graph combine A B ;

1 Ответ

0 голосов
/ 25 мая 2018

Вам необходимо изменить ориентацию для каждого ytitle на вертикальную и объединить графики только один раз в нужном порядке.

Следующее даст вам фигуры одинакового размера согласно вашему запросу:

sysuse auto, clear
graph drop _all
# delimit ;

* First 2 figures;

twoway (line weight mpg if foreign == 1, 
        sort ytitle("Some longer ytitle",  orientation(vertical)) 
        title("Foreign", box bexpand) yla(, ang(h))  xtitle("")
        xlabel(,noticks) name(A1, replace ) graphregion(color(gs16)));

twoway (line weight mpg if foreign == 1, sort 
        ytitle("short", orientation(vertical)) yla(, ang(h))  xtitle("")
        xlabel(,noticks) name(A2, replace ) graphregion(color(gs16)));

* Second 2 figures;

twoway (line weight mpg if foreign == 0, sort ytitle("") 
        title("Domestic", box bexpand)  xtitle("") xlabel(,noticks) 
        name(B1, replace ) graphregion(color(gs16)) );

twoway (line  weight mpg if foreign == 0, sort ytitle("")  xtitle("")
        xlabel(,noticks) name(B2, replace ) graphregion(color(gs16)));

* Combining the 4 graphs;

graph combine A1 B1 A2 B2;

enter image description here

Я бы также рекомендовал, чтобы графики в первом столбце поворачивали свои метки yaxis в вертикальном углу, чтобы они соответствовали меткам вграфики во втором столбце:

enter image description here

Обратите внимание, что, уменьшив размер меток тиковых значений для обеих осей, вы можете придать большее значение ytitle.Возможно, вам придется настроить интервал между метками ytitle и yaxis.


РЕДАКТИРОВАТЬ:

Вы можете использовать "грубую силу"Стата, чтобы делать то, что вам нравится, но вы никогда не получите именно то, что вы хотите.Это связано с переменной ytitle length, которая влияет на всю область графика.

Быстрое решение заключается в следующем:

sysuse auto, clear
graph drop _all
# delimit ;

* First 2 figures;

twoway (line weight mpg if foreign == 1, 
        sort ytitle("Some longer ytitle",  orientation(h)) 
        title("Foreign", box bexpand) yla(, ang(h))  xtitle("")
        xlabel(,noticks) name(A1, replace ) graphregion(color(gs16)));

twoway (line weight mpg if foreign == 1, sort 
        <b>ytitle("                     short", orientation(h))</b> yla(, ang(h))  xtitle("")
        xlabel(,noticks) name(A2, replace ) graphregion(color(gs16)));

* Second 2 figures;

twoway (line weight mpg if foreign == 0, sort ytitle("") 
        title("Domestic", box bexpand)  xtitle("") xlabel(,noticks) 
        name(B1, replace ) graphregion(color(gs16)) );

twoway (line  weight mpg if foreign == 0, sort ytitle("")  xtitle("")
        xlabel(,noticks) name(B2, replace ) graphregion(color(gs16)));

* Combining the 4 graphs;

<b>graph combine A1 B1 A2 B2, xsize(7);</b>

Обратите внимание на изменения в коде, которые указаны полужирный .

enter image description here

Вы также можете поиграть со значениями и посмотреть, сможете ли вы немного улучшить положение:

enter image description here

Указание правого поля в опции graphregion вторых 2 цифр также улучшает положение:

twoway (line weight mpg if foreign == 0, sort ytitle("") 
        title("Domestic", box bexpand)  xtitle("") xlabel(,noticks) 
        name(B1, replace ) <b>graphregion(color(gs16) margin(r=22))</b>);

twoway (line  weight mpg if foreign == 0, sort ytitle("")  xtitle("")
        xlabel(,noticks) name(B2, replace ) <b>graphregion(color(gs16) margin(r=22))</b>);

enter image description here

...