最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

SAS繪圖、R繪圖(三):平分秋色、各有千秋

2023-08-20 10:38 作者:統(tǒng)計_碎碎念  | 我要投稿

1?繪圖軟件簡介——R & SAS

? R因其“開源、免費、門檻低”受到越來越多人的青睞,R-package涵蓋了許多前沿的統(tǒng)計方法和精美的可視化功能,在科研數據分析中的地位也越來越重要。

? SAS因其卓越的運算性能、穩(wěn)定的運算架構和強大的數據管理能力受到越來越多專業(yè)人士的青睞,廣泛運用于醫(yī)學、統(tǒng)計和數學分析,商業(yè)規(guī)劃,預測運籌優(yōu)化以及應用開發(fā)等。

2?什么是科研繪圖?

? 讓我們來看看SAS和R的官方是如何介紹自己的繪圖模塊的,R語言中“ggplot2是一款強大的統(tǒng)計分析及可視化軟件包,光是此包的官方文檔就足有292頁,但SAS則更多,對于其template繪圖語句的文檔有730頁。

? 其中官方文檔中對“ggplot2”功能描述是這樣的:

? Description:?A system for 'declaratively' creating graphics,?based on ``The Grammar of Graphics''. You provide the data, tell 'ggplot2'?how to map variables to aesthetics, what graphical primitives to use,?and it takes care of the details.

? 而SAS則是這樣的:

? Description:?The Graph Template Language (GTL) is the heart of ODS Graphics. All of the graphs that are created by the SAS analytical procedures and by the SAS statistical graphics procedures are generated using GTL. Users who need to go beyond the graphs created by these SAS procedures can use GTL directly to design their graphs using the TEMPLATE and SGRENDER procedures. To successfully create or modify GTL templates, you need the information in this guide, which helps you understand important concepts and offers many complete code examples that illustrate frequently used features. You also need SAS Graph Template Language: Reference, which is the language dictionary for GTL.

? 當然官方文檔中更多介紹這里不再羅列,通過閱讀和實操體會,自然而然我們可以總結出繪圖原理包括以下幾個核心概念:

數據映射:首先,將數據集中的變量映射到圖形屬性上,例如將變量映射到x軸和y軸上,或將變量映射到顏色、形狀等圖形屬性上。通常數據映射是需要經過數據清洗得到的。

統(tǒng)計變換:在繪制圖形前,可以對數據進行一些統(tǒng)計變換,例如計算均值、中位數、分位數等。這些統(tǒng)計變換可以用來創(chuàng)建匯總統(tǒng)計圖形,如直方圖(hist)、散點圖(scatterplot)等。可視化的核心目的即為理解數據,發(fā)現關聯或趨勢,傳達信息而提出。

幾何對象:使用幾何對象來表示數據,常見的幾何對象有點(point)、線段(line)、條形圖(bar)、箱線圖(boxplot)等。通過指定繪圖的幾何對象,可以創(chuàng)建出不同形式的圖形。基于目的,用不同幾何對象可視化的效果也各不相同。

坐標系統(tǒng):坐標系統(tǒng)定義了繪圖的坐標軸和刻度。R中ggplot可以使用多種類型的坐標系統(tǒng),如笛卡爾坐標系(cartesian)、極坐標系(polar)等。這使得可視化結果不僅僅局限于二維,還可以是三維或更高維度的展示。

圖層(Layer):通過逐層添加幾何對象、數據映射和統(tǒng)計變換,可以創(chuàng)建出復雜的圖層。每個圖層可以有不同的數據映射和統(tǒng)計變換,多個圖層疊加在一起,最終形成繪圖的結果。不同元素的疊加,都需要有自己的圖層,不同元素的圖層參照系可以相同,也可以不同。

主題(Theme):主題定義了繪圖的樣式和外觀,包括背景顏色、字體、坐標軸樣式等。ggplot允許用戶根據需求自定義主題,以創(chuàng)建適應不同風格和需求的圖形。主題設置一是為了規(guī)范化使用者的可視化結果,二是減少工作量,去除不必要的冗雜代碼。


3 代碼本質區(qū)別?

下面我們使用SAS軟件中 sashelp邏輯庫下的class數據庫作為本篇文章的示例數據集。

SAS code

? ?數據映射:proc?sgplot?data= Class 指定映射數據集,vbar?Sex /?response= Height ?group=Sex指定了映射元素以及如何映射。統(tǒng)計變換groupdisplay=cluster?,stat=mean?集中趨勢的呈現方式。Vbar代表了誤差柱狀圖,即幾何對象xaxis、yaxis即對坐標系統(tǒng)進行了設置,這里調整了字體及其大小。由于此處未使用proc template?選項所以未對圖層和主題進行設置。


*設置圖形Dpi;

ods html dpi=300;

*設置繪圖面板長和寬;

ods graphics / reset noborder height=6in width=5in;

proc sgplot data= SAShelp.Class SGANNO=anno;

? *指定顏色循環(huán);

? styleattrs datacolors=("#ff5500" "#4b71af" ) datacontrastcolors = ("#ff5500" "#4b71af");

? *關鍵代碼;

? vbar Sex / response= Height? group=Sex groupdisplay=cluster CLUSTERWIDTH=0.7 BARWIDTH=0.8??

??? stat=mean limits=upper limitstat=STDDEV LIMITATTRS=(color=black thickness=2) LIMITCAPSCALE=0.7

??? DISPLAYBASELINE=off TRANSPARENCY=0;?

? *X軸設置;

? xaxis display=(nolabel)

??? valueattrs=(size=10 Family="Times New Roman/宋體" Weight=Bold)??

??? labelattrs=(size=11 Family="Times New Roman/宋體" Weight=Bold) type=discrete;

? *Y軸設置;

? yaxis label="身高(m)"

??? valueattrs=(size=10 Family="Times New Roman/宋體" Weight=Bold)?

???? labelattrs=(size=11 Family="Times New Roman/宋體" Weight=Bold) OFFSETMAX=0.2;

? *圖例設置;

? keylegend / title="Gender" location=inside down=1 position=TOPright noborder;

run;

quit;

R code:

? 數據映射:data=Meanlist, 映射數據集,mapping=aes(x=Sex, y=mean,fill=Sex)指定了映射元素以及如何映射,統(tǒng)計變換:stat="identity"集中趨勢的呈現方式。geom_bar和geom_errorbar代表了誤差柱狀圖,即幾何對象。theme()即對坐標系統(tǒng)進行了設置,這里調整了字體及其大小。注意此時整個theme模塊包含了許多主題參數,并且此時我們先通過geom_bar繪制了柱狀圖的圖層,然后通過geom_signif繪制了差異性檢驗結果圖層,最后通過geom_errorbar繪制了誤差圖層,這里可以調換繪制順序,不影響最終繪圖效果

?

ggplot()+

? geom_bar(data=Meanlist,mapping=aes(x=Sex,y=mean,fill=Sex), # fill填充

?????????? position="dodge", # 柱狀圖格式

?????????? stat="identity", # 數據格式

?????????? width = 0.7)+? # 柱狀圖尺寸

? scale_fill_manual(values = c("#ff5500", "#4b71af"))+ # 柱狀圖顏色

? geom_signif(data=df,mapping=aes(x=Sex,y=Height), # 不同組別的顯著性

????????????? comparisons = list(c("男", "女")),# 哪些組進行比

????????????? annotation="P > 0.05",# 顯著性差異做標記

????????????? map_signif_level=T, # T為顯著性,F為p value

????????????? tip_length=c(0.04,0.04,0.05,0.05), # 修改顯著性那個線的長短

????????????? y_position = 70, # 設置顯著性線的位置高度

????????????? size=1, # 修改線的粗細

????????????? textsize = 5, # 修改*標記的大小

????????????? test = "t.test",

????????????? fontface = "italic",

????????????? family = "myFont")+ # 檢驗的類型

? geom_errorbar(data=Meanlist,mapping=aes(x =Sex,ymin = mean, ymax = mean+sd), # 誤差線添加

??????????????? width = 0.1, #誤差線的寬度

??????????????? color = 'black', #顏色

??????????????? size=0.8)+ #粗細

? scale_y_continuous(limits =c(0, 80) ,expand = c(0,0))+ # y軸的范圍

? theme_classic(? # 主題設置,這個是無線條主題

??? base_line_size = 1 # 坐標軸的粗細

? )+

? labs(title="",x="",y="身高(m)",fill = "性別")+ # 添加標題,x軸,y軸內容

?? theme(

???? # plot.title = element_text(size = 20,colour = "red",hjust = 0.5),

??????? axis.title.y = element_text(size = 15,? family = "myFont", color = "black",

?? ?????????????????????????????????face = "bold",? vjust = 1.9,? hjust = 0.5,? angle = 90),

??????? legend.title = element_text(color="black", # 修改圖例的標題

??????????????????????????????????? size=15,

??????????????????????????????????? face="bold"),

??????? legend.text = element_text(color="black", # 設置圖例標簽文字

?????????????????????????????????? size = 15,

?????????????????????????????????? face = "bold"),

??????? axis.text.x = element_text(size = 15,? # 修改X軸上字體大小,

?????????????????????????????????? # family = "myFont", # 類型

?????????????????????????????????? color = "black", # 顏色

?????????????????????????????????? face = "bold", #? face取值:plain普通,bold加粗,italic斜體,bold.italic斜體加粗

?????????????????????????????????? vjust = 0.5, # 位置

?????????????????????????????? ????hjust = 0.5,

?????????????????????????????????? angle = 0), #角度

??????? axis.text.y = element_text(size = 15,? # 修改y軸上字體大小,

?????????????????????????????????? # family = "myFont", # 類型

?????????????????????????????????? color = "black", # 顏色

?????????????????????????????????? face = "bold", #? face取值:plain普通,bold加粗,italic斜體,bold.italic斜體加粗

?????????????????????????????????? vjust = 0.5, # 位置

?????????????????????????????????? hjust = 0.5,

?????????????????????????????????? angle = 0) #角度

方才我們展示了R和SAS繪圖代碼并無本質區(qū)別,接下來讓我們看看兩者繪制的圖如何。

4 案例—柱狀圖(誤差線+差異性檢驗)

? 這里我們會發(fā)現SAS和R代碼在繪圖原理基礎上并無區(qū)別,SAS的Porc sgplot并無對主題的設置,這就導致了SAS圖的邊框無法自定義(如果沒有使用template)。

? 你能發(fā)現哪個是SAS繪圖,哪個是R繪圖嗎?

? 針對70%左右的圖形,SAS和R可以達到同樣的效果。而為了更加方便、批量重復繪圖,SAS提供了宏程序功能,下面是筆者撰寫的SAS繪制KM曲線和ROC曲線的宏程序(后續(xù)本課題組將會持續(xù)推出各種SAS繪圖以及統(tǒng)計分析的宏程序系列):

繪圖效果如下:


5總結:

? 在大部分繪圖過程中SAS和R是沒有本質區(qū)別的,區(qū)別在對圖的精細調整,如果只是想要實現兩者繪圖效果基本一致,那么SAS的proc sgplot 和 R的 ggplot的繪圖效果只取決于你代碼的精細程度(甚至可以完全一致)。

? 如果想要實現每個細節(jié)的調控,SAS必須借助proc template語句進行模版撰寫,回頭看這也正是SAS繪圖官方文檔長達720頁的主要原因,其對細節(jié)的調整不亞于R的ggplot各種函數,只是R把所有的參數全部集中在了ggplot()中。

拓展 高階SAS繪圖

???? 相信先前大家對于R的高階繪圖或多或少有些了解,部分使用者對于SAS的繪圖能力一直以來產生質疑,那現在就給大家展示一下SAS的天花板繪圖吧,!當然要繪制出這些圖形代碼就相對復雜了,代碼少則百行,多則千行。對以下所有圖有興趣的同學和老師可以后臺聯系小助手。

如需以上繪圖高階代碼,請后臺私信聯系!

關注微信公眾號,獲取更多相關內容!


?

程序編寫:想不出吸睛好名字、天涯二毛君

文字編輯:想不出吸睛好名字

審閱:老陳


SAS繪圖、R繪圖(三):平分秋色、各有千秋的評論 (共 條)

分享到微博請遵守國家法律
北海市| 宁国市| 万安县| 南靖县| 英超| 醴陵市| 昌平区| 仙居县| 肇东市| 庐江县| 云林县| 新郑市| 郑州市| 临沧市| 炎陵县| 英德市| 乐陵市| 曲沃县| 宣汉县| 阿巴嘎旗| 朝阳区| 横山县| 洱源县| 广平县| 庆城县| 乌兰浩特市| 常熟市| 东明县| 炉霍县| 根河市| 广南县| 理塘县| 印江| 三穗县| 乐山市| 色达县| 正定县| 如皋市| 团风县| 政和县| 彭山县|