bugfix> graphics > 投稿

graph combine を使用してStataで4つのグラフを結合しようとしています 。

結果を次の図に示します。

4つの図はすべて同じサイズでなければなりませんが、水平方向の ytitle のため 、最初の2つは圧縮されています。 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 件
  • ytitle の向きを変更する必要があります  縦に並べて、グラフを目的の順序で1回だけ結合します。

    以下は、リクエストごとに同じサイズの数字を提供します:

    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;
    
    

    また、最初の列のグラフで yaxis を回転させることをお勧めします  2番目の列のグラフのラベルと一致するように、ラベルを垂直方向にチェックします。

    両方の軸の目盛り値ラベルのサイズを小さくすることにより、 ytitle をより目立たせることができます。 。 ytitle 間の間隔を調整する必要がある場合があります  そして、 yaxis  ただし、ラベルをチェックします。


    編集:

    Stataを好きなように「ブルートフォース」することはできますが、望みどおりの結果が得られることはありません。これは、変数 ytitle が原因です。  グラフ領域全体に影響する長さ。

    簡単な解決策は次のとおりです。

    sysuse auto、clear
    グラフドロップ_all
    #delimit;
    *最初の2つの数字。
    twoway(foreign == 1の場合、線の太さmpg
            ytitle( "より長いytitle"、orientation(h))をソートします
            title( "Foreign"、box bexpand)yla(、ang(h))xtitle( "")
            xlabel(、noticks)name(A1、replace)graphregion(color(gs16)));
    twoway(foreign == 1の場合、線の太さmpg、並べ替え
            ytitle( "short"、orientation(h)) yla(、ang(h))xtitle( "")
            xlabel(、noticks)name(A2、replace)graphregion(color(gs16)));
    * 2番目の2桁。
    twoway(foreign == 0の場合、線の太さmpg、ytitle( "")を並べ替える
            title( "Domestic"、box bexpand)xtitle( "")xlabel(、noticks)
            name(B1、replace)graphregion(color(gs16)));
    twoway(foreign == 0の場合、線の太さmpg、ytitle( "")xtitle( "")で並べ替え
            xlabel(、noticks)name(B2、replace)graphregion(color(gs16)));
    * 4つのグラフを組み合わせます。
    グラフ結合A1 B1 A2 B2、xsize(7);
    

    コードの変更に注意してください。大胆な

    値をいじって、少し改善できるかどうかを確認することもできます。

    graphregion で右マージンを指定する  2番目の2つの数字のオプションも物事を改善します。

    twoway(foreign == 0の場合、線の太さmpg、ytitle( "")をソートします)
            title( "Domestic"、box bexpand)xtitle( "")xlabel(、noticks)
            name(B1、replace)graphregion(color(gs16)margin(r = 22)));
    twoway(foreign == 0の場合、線の太さmpg、ytitle( "")xtitle( "")で並べ替え
            xlabel(、noticks)name(B2、replace)graphregion(color(gs16)margin(r = 22)));
    

あなたの答え