當前位置:
首頁 > 最新 > 如何用Stata作漂亮的圖?來看超詳細教程!

如何用Stata作漂亮的圖?來看超詳細教程!

概要

本文涉及到的內容包括,在拿到一個數據集後:

如何使用list、describe命令,初步了解數據集;

如何使用codebook、summarize命令了解某一個變數x的缺失值、統計量,並使用stem、graph box、histogram命令畫出莖葉圖、箱式圖以及柱狀圖;

如何使用twoway graphs來展示數值型變數x和y之間的關係,並畫出散點圖(scatter plot)、折線圖(line plot)、帶數據標記的直線圖(connected plot)等多種圖像;

如何使圖像變得更加美觀。

下面,我們通過例子來了解這些命令。本次使用的是1900-1999年美國期望壽命的數據,這是Stata 14.0自帶的一個資料庫。

提醒:

(1)使用Stata時,盡量不用命令框,而最好使用do file編寫命令。這樣可以保證操作的可重複性。

(2)本文中,所有命令以黃色背景、粗體、藍色字體顯示。

(3)do file中命令末尾的雙斜線//表示添加註釋(例如,圖0.1.1第6行set linesize 255後為注釋),三斜線///表示換行(例如,圖0.1.1從第8行到16行為一個完整的命令,其中使用///換行)。

圖0.1.1

1. 導入數據並觀察

為了方便大家學習,我們在本教程中使用Stata自帶的數據uslifeexp.dta,大家可以輸入sysuse dir這行命令查看系統自帶的資料庫(圖1.1.1)。若沒有uslifeexp這個資料庫。

圖1.1.1 Stata 14.2自帶的資料庫

. sysuse uslifeexp

這一步的目的是導入該系統自帶數據。屏幕顯示的結果如下。

. list in 1/10

通過這個命令,我們可以查看該資料庫第1到第10個數據,對數據有一個初步的了解。屏幕顯示的結果如下。

. describe

2. 單變數探索以及作圖

在這一小節中,我們一起來對某一個變數進行探索。我們會用到四個命令,分別是codebook、summarize、stem以及histogram。我們以數據集中的變數le (life expectancy)為例。這個變數是人均預期壽命。

2.1 Codebook

Codebook這個命令適合於我們初次接觸一個數據集的變數。

. codebook le

2.2 Summarize

Summarize這個命令可以讓我們更加深入地探索變數的統計量。

. summarize le

下圖是summarize le這行命令的結果,給出最常用的幾個統計量。

而summarize le, detail這行命令則會給出更多的統計量。

. summarize le, detail

其中,smallest和largest代表了該變數最大和最小值,即預期壽命(le)的4個最高值和4個最低值。

2.3 其他圖像

為了探索變數的分布,我們還可以使用莖葉圖(stem plot)、箱式圖(box plot)、直方圖(histogram)等圖像進行探索。

. stem le

. graph box le(左圖)

. hist le(右圖)

** hist是histogram的縮寫。在Stata中,一些命令有縮寫形式,如summarize可以縮寫為sum。

由於篇幅有限,對於這些圖像,我們在此不做贅述。但是我們應該記住,莖葉圖的莖寬、保留位數;直方圖的組距、顏色、y軸是頻率還是頻數等都可以進行自定義,直到畫出滿意的圖像。感興趣的讀者可以在命令行中輸入help stem、help graph box、help histogram獲取help文件。如還有不清楚的地方,可以聯繫小咖獲取幫助。

3. 雙變數作圖

在這一小節中,我們對於雙變數進行繪圖。我們繼續研究預期壽命(le)隨年份(year)變化的規律。不同的是,我們使用le_male與le_female繪製2個y變數和x的圖,使用le_wmale、le_wfemale、le_bmale、le_bfemale繪製4個y變數和x的關係。

. twoway plot [if] [in] [, twoway_options]

twoway的命令是twowayplot變數[if] [in] [, twoway_options],我們可以自己定義的主要是:

plot:選擇圖像的種類,這裡的plot可以改成scatter, plot, connected, area, bar等,我們可以繪製出相應的圖。

變數:這裡可以寫一個或多個y變數,一個x變數。最後一個是x變數,之前的為y變數。

[if] [in] [, twoway_options]等中括弧內的命令是可選命令,如果不寫,則表示默認值。

if:定義所取某一個自變數的範圍,例如if le > 40,即只畫le>40的圖

in:定義所取觀測值的範圍,例如in 10/20,即只畫第10到20個觀測值的圖

twoway_options:可以定義圖像的「美觀」部分,例如坐標軸範圍、標題、注釋、標籤等等。

3.1 一個y變數(預期壽命(le)隨年份(year)變化的關係)

twowayploty x,其中plot可以換為某種特定的圖像,如scatter。

-散點圖

下圖Stata代碼:

. twoway scatter le year

圖2.1.1 散點圖

-折線圖

. twoway line le year

圖2.1.2 折線圖

同理,我們還可以做出更多種的圖。

. twoway connected le year(左上,帶數據標記的折線圖)

. twoway dropline le year(右上,垂直線圖)

. twoway spike le year(左下,脈衝圖)

. twoway lowess le year(右下,lowess圖)

圖2.1.3

大家可以輸入help graph_twoway,查看Stata都可以做出什麼樣的圖。

3.2 多個y 變數

命令形式:graph twoway plot yvar1 yvar2 yvar3 … xvar

plot表示我們要畫的是某種圖,之後是變數的名字。

Stata會默認最後一個變數是x變數,plot和x變數之間則均為y變數。

下圖Stata代碼:graph twoway scatter le_male le_female year

圖3.2.1

下圖Stata代碼:twoway line le_male le_female year

圖3.2.2

下圖Stata代碼:twoway area le_female le_male year

圖3.2.3

下圖Stata代碼:twoway line le_wmale le_wfemale le_bmale le_bfemale year

圖3.2.4

注意:

在Stata中,上述命令graph twoway plot yvar1 yvar2 yvar3 xvar和下列命令等價:

- graph twoway (plot yvar1 xvar) (plot yvar2 xvar) (plot yvar3 xvar)

- graph twoway plot yvar1 xvar || plot yvar2 xvar || plot yvar3 xvar

. twoway scatter le_m le_f year

. twoway (scatter le_m year) (scatter le_f year)

. twoway scatter le_m year || scatter le_f year

(以上3個命令等價,畫出下圖)

圖3.2.5(同3.2.1)

因此,我們完全可以在同一張圖上畫出不同y變數。

(以上1-4行為第一個命令,6-9行為第二個命令,兩個命令等價,畫出下圖)

圖3.2.6

也可以將yvar1的兩種不同的曲線畫在同一幅圖上。

. twoway (scatter le year) (lfit le year)

. twoway scatter le year || lfit le year

(以上2個命令等價,畫出下圖)

圖3.2.7

4. 改變點的大小形狀,

改變線的粗細、樣式

在這一節,我們主要講對於點和線的處理。我們重新回到男、女預期壽命比較這幅圖(圖3.2.1)。

下圖的Stata代碼:graph twoway scatter le_male le_female year

圖4.1.1(同3.2.1)

對於這幅圖,我們沒有定義點的顏色、形狀、大小等等參數,而是接受了Stata給出的默認值。我們也可以對此進行更改。

例如:

下圖的Stata代碼(藍色背景部分為新增內容):

graph twoway scatter le_male le_female year,mcolor(red blue) msymbol(circle diamond) msize(vsmall vsmall)

圖4.1.2(圖3.2.1改進)

在這行code中,我們調整了點的顏色(mcolor),形狀(msymbol),大小(msize)。括弧里的順序(red blue)應按照y變數的順序 (le_male le_female) 依次對應,這樣紅色代表le_male,blue代表le_female。

除了點的顏色、形狀、大小外,Stata還給了我們多種改進的方案,如點內部顏色、點外周顏色、點外周寬度等等。讀者可以通過在命令行里輸入help scatter##marker_options得到更加詳盡的介紹。

我們也可以更改連線的屬性。讓我們回到3.2.2這幅圖。

下圖Stata代碼:twoway line le_male le_female year

圖4.1.3(同圖3.2.2)

對於這幅圖,我們同樣可以改進。

下圖Stata代碼(藍色背景部分為新增內容):

twoway line le_male le_female year,lcolor(red blue) lpattern(solid dash) lwidth(thin thin)

圖4.1.4(圖3.2.2改進)

在這行code中,我們調整了線的顏色(lcolor),連接方式(lpattern),寬度(lwidth)。括弧里的順序(red blue)應按照y變數的順序 (le_male le_female) 依次對應,這樣紅色代表le_male,blue代表le_female。

除了線的顏色、連接方式、寬度外,Stata還給了我們多種改進的方案。

5. 改進圖像整體

在下圖分性別和人種的預期壽命比較中,1920年的預期壽命看起來近似於0,但其實是30左右。

圖5.1.1(同圖3.2.4)

上圖Stata代碼:twoway line le_wmale le_wfemale le_bmale le_bfemale year

我們怎樣調整坐標軸的範圍、單位,以更適應我們的預期呢?

(1)改變坐標軸的最大值、最小值

下圖代碼(藍色背景部分為新增內容):

. twoway line le_wmale le_wfemale le_bmale le_bfemale year,yscale(range(0))

yscale(range(0)) 要求y軸的範圍包括0

圖5.1.2

下圖代碼(藍色背景部分為新增內容):

. twoway line le_wmale le_wfemale le_bmale le_bfemale year,yscale(range(0 90))

※ yscale(range(0 90)) 要求y軸的範圍包括0到90

圖5.1.3

同理,我們也可以改變使用xscale(range())來改變x軸的範圍。

(2)改變坐標值的刻度

在圖3.1.2中,我們雖然包含了0和90,但是圖看起來仍然很醜,因為y軸的刻度值仍然是從30到80。因此我們要改變坐標軸刻度的起止點和範圍。

下圖代碼(藍色背景部分為新增內容):

. twoway line le_wmale le_wfemale le_bmale le_bfemale year, yscale(range(0 90))ylabel(0(10)90)

※ ylabel(0(10)90)的意思是y軸的刻度從0開始,到90結束,每隔10添加一個刻度

圖5.2.1

同理,對於x軸,我們希望每隔5年標記一個刻度。我們加上了xlabel(1900(5)2000)

下圖代碼(藍色背景部分為新增內容):

twoway line le_wmale le_wfemale le_bmale le_bfemale year, ///

yscale(range(0 90)) ylabel(0(10)90)xlabel(1900(5)2000)

圖5.2.2

然而,現在x軸的坐標重疊到了一起,不是很好看清楚。

我們將xlabel稍作更改:xlabel(1900(5)2000)改為xlabel(1900(10)2000) ,並加上了xtick(1900(5)2000)。我們使用xtick(1900(5)2000),意味著每隔5年在x軸上加一個小標記,而xlabel(1900(10)2000)意味著每隔10年在x軸上寫上具體的年份。

下圖代碼(藍色背景部分為新增內容):

twoway line le_wmale le_wfemale le_bmale le_bfemale year, ///

yscale(range(0 90)) ylabel(0(10)90)xlabel(1900(10)2000) xtick(1900(5)2000)

圖5.2.3

?

(3)加標題

現在,我們添加了title("20世紀美國預期壽命變化圖") subtitle("1900年-2000年") ytitle("預期壽命") xtitle("年份"),其中:

用title("20世紀美國預期壽命變化圖") 給圖像加上大標題;

用subtitle("1900年-2000年")加上小標題;

用ytitle("預期壽命")給y軸加上標題;

用xtitle("年份") 給x軸加上標題。

下圖代碼(藍色背景部分為新增內容):

圖5.3.1

還可以加上說明文字和注釋。

下圖代碼(藍色背景部分為新增內容):

圖5.3.2

(4)改變圖例

在Stata中,圖例默認按照變數的標籤(label)添加,堆積在圖像的底部。我們怎麼能把圖例做得更美觀呢?比如,加上中文?改變位置?改變排列順序?我們可以添加legend()選項進行改變。

在下圖中,我們添加了legend(ring(0) pos(5) label(1 "白人男性") label(2 "白人女性") label(3 "黑人男性") label(4 "黑人女性") cols(1)),其中:

ring(0)代表把圖例放在圖像內部;

pos(5)代表了圖例在圖像的5點鐘的位置(和鐘錶的數字位置相同);

label改變了圖例的文字,從1-4對應著命令中le_wmale le_wfemale le_bmale le_bfemale的順序;

cols(1)代表希望他們在一列中顯示(同理,rows(1)代表希望同一行顯示)。

下圖代碼:

圖5.3.3

看完本文,是不是對Stata作圖有一些了解呢?有任何不明白的地方,歡迎在文章下方留言哦~~如果想獲取本教程的PDF電子版或do file,也請在下方留言中留下郵箱,小咖發到你郵箱!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 醫咖會 的精彩文章:

KM法生存分析,史上最詳細的SPSS教程!
統計方法套路深,細說I類錯誤和II類錯誤!

TAG:醫咖會 |

您可能感興趣

Stata詳細教程:Cox回歸和比例風險假定檢驗
Stata中的十個雕蟲小技(下)
Stata常用命令100條