之前給大家寫過一篇plot的基礎(chǔ)操作史简,相信同學(xué)們應(yīng)該沒有看過癮乃秀。不過主流的用的多的還是ggplot2,所以今天打算結(jié)合一個(gè)形成APA樣板格式圖片的實(shí)例寫寫ggplot2的操作和圖的配色圆兵。
關(guān)于APA格式
大家可以去到美國(guó)心理學(xué)會(huì)的官網(wǎng)跺讯,就可以看到APA格式的詳細(xì)介紹了:
[圖片上傳失敗...(image-d489d9-1657458632167)]
包括論文模板、引注規(guī)則等等殉农,內(nèi)容可以說很豐富了刀脏,對(duì)于社科類學(xué)生,不會(huì)寫論文的超凳,這個(gè)網(wǎng)站就是金標(biāo)準(zhǔn)啦愈污,強(qiáng)烈推薦下。
不過我們今天關(guān)注的是里面的figure的標(biāo)準(zhǔn)轮傍,點(diǎn)開主頁的Tables and Figures我們進(jìn)入到下一個(gè)界面:
[圖片上傳失敗...(image-a58949-1657458632167)]
里面有表格模板暂雹,和figure模板,像表格模板里面创夜,回歸分析如何做表杭跪,因子分析如何做表等等的,人家都給了標(biāo)準(zhǔn)模板,這些不就是好多同學(xué)想要的嗎涧尿,好多同學(xué)跑來咨詢的嗎桨醋?一股腦人家美國(guó)心理學(xué)會(huì)全給大家整理好了,推薦一波现斋。具體到figure模板,里面有這么多:
[圖片上傳失敗...(image-bdad8f-1657458632167)]
像樣本納入排除的流程圖怎么做偎蘸,路徑分析的圖怎么做庄蹋,質(zhì)性研究,混合設(shè)計(jì)研究的圖等等應(yīng)有盡有無所不有迷雪,只能說---真好限书!
那么本文希望將下面的這一幅APA官網(wǎng)上的示例柱狀圖用ggplot2做出來,并在做過程中結(jié)合著給大家寫寫ggplot2的常見操作(ggplot2的作圖原理我看網(wǎng)上已經(jīng)有很多了章咧,大家可以自行去搜索學(xué)習(xí)倦西,本文略過)
[圖片上傳失敗...(image-19d835-1657458632167)]
實(shí)例操練
我的畫圖示例數(shù)據(jù)如下:
[圖片上傳失敗...(image-c1204f-1657458632167)]
可以看到數(shù)據(jù)中有我們畫柱狀圖需要的score和誤差線需要的upper和lower的值,和分組變量reward赁严。
第一步我們將映射關(guān)系處理好:
viz_data_one %>%
ggplot(aes(x = age_group,
y = framing_score,
fill = reward,
ymin = lower,
ymax = upper))
形成下圖扰柠,在上面的代碼中我只是告訴ggplot,我的xy軸分別是那兩個(gè)變量疼约,用什么變量去映射到填充色卤档,同時(shí)上下限分別是多少,僅此而已程剥,我并沒有告訴它應(yīng)該用什么geom去代表我的數(shù)據(jù)劝枣,所以ggplot不知道,它也不會(huì)給你展示任何的geometry织鲸,所以代碼運(yùn)行后輸出除了映射的xy軸舔腾,就沒了,如下:
[圖片上傳失敗...(image-7c2bd3-1657458632167)]
在上面的代碼繼續(xù)往下寫搂擦,我知道我需要一個(gè)柱狀圖稳诚,所以geometry應(yīng)該是geom_bar,同時(shí)我要用來畫柱子的變量-score就代表柱子的高度盾饮,不需要進(jìn)行統(tǒng)計(jì)轉(zhuǎn)換采桃,所以寫參數(shù)stat = 'identity';我需要3組柱子并排排列丘损,同時(shí)設(shè)定柱子之間的寬度(position_dodge(.6))和柱子的寬度(width)普办,到此時(shí)寫出代碼如下:
geom_bar(stat = 'identity',color='black',position = position_dodge(.6),width = .5)
上面代碼中的position_dodge就是要求柱子并列排列,里面的第一個(gè)參數(shù)就是并列的寬度徘钥,width = .5設(shè)定的是柱子的寬度衔蹲,運(yùn)行代碼后效果如下:
[圖片上傳失敗...(image-44fd27-1657458632167)]
感覺還不錯(cuò)哦。
下一步我們需要將誤差條加上,這又是另一個(gè)geom了舆驶,此時(shí)我們繼續(xù)加一個(gè)geometry橱健,叫做geom_errorbar,同樣的我們的誤差條和柱子一樣需要并列排列沙廉,同時(shí)我們的誤差棒的寬度也得減少拘荡,于是我們?cè)O(shè)定width = .1,同時(shí)position = position_dodge(.6)撬陵,寫出代碼如下:
geom_errorbar(width = .1, position = position_dodge(.6))
運(yùn)行后輸出如下:
[圖片上傳失敗...(image-bbf7c2-1657458632166)]
到現(xiàn)在圖中有兩個(gè)geom珊皿,一個(gè)bar,一個(gè)是errorbar巨税,我們的數(shù)據(jù)信息已經(jīng)全部通過geometry展示出來了蟋定。
接下來修飾細(xì)節(jié),首先是改變顏色草添,我們需要指定一下映射的顏色驶兜,具體來講我們是改變fill的填充色,所以需要用到scale_fill_manual函數(shù)远寸。
那么顏色怎么樣去選呢抄淑?或者怎么快速找到你心儀的顏色呢?
首先安裝colourpicker包而晒,然后你的Rstudio就會(huì)出現(xiàn)顏色選擇的插件了Plot Color Helper蝇狼,有了它你就可以非常方便地選出來你想要的顏色并得到顏色的表示方法:
[圖片上傳失敗...(image-3948cf-1657458632166)]
點(diǎn)擊Plot Colour Helper得到如下圖(我只截了一張,你可以選各種顏色的):
[圖片上傳失敗...(image-f07c10-1657458632166)]
通過這么一下倡怎,我就選了下面3個(gè)顏色迅耘,并且寫出如下代碼:
scale_fill_manual(values = c("#FAFAFA", "#FFA500", "#6CA6CD"))
此時(shí)再運(yùn)行輸出結(jié)果如下:
[圖片上傳失敗...(image-59560c-1657458632166)]
接下來我們要處理一些圖中的非數(shù)據(jù)元素(non-data elements),比如背景监署,比如各種標(biāo)簽颤专,首先我們改xy軸的標(biāo)簽和圖例的title,需要用到labs函數(shù)钠乏,寫出代碼如下:
labs( x = "Age Group",y = "Framing Score",fill = NULL,title = "Low Risk")
上面的代碼栖秕,x = "Age Group",y = "Framing Score"這都很簡(jiǎn)單,因?yàn)槲覀兊膱D例是針對(duì)fill的晓避,那么此時(shí)fill在labs中就是圖例的title簇捍,上面的代碼將圖例的title拿掉了,同時(shí)加上了整個(gè)圖的title俏拱。
還有我們需要將xy軸的結(jié)合位點(diǎn)設(shè)置為0暑塑,這個(gè)操作是針對(duì)y軸的,需要用到scale_y_continuous锅必,代碼如下:
scale_y_continuous(expand = expansion(0), limits = c(0, 0.4), breaks = seq(0, .4, .1))
上面的代碼中expand是控制y軸的上下限的伸展程度的事格,expansion(0)就意味著y軸不做任何拓展,limits設(shè)定y軸的界限(其實(shí)是數(shù)據(jù)量的界限),breaks設(shè)定y軸上的ticks驹愚。
運(yùn)行后得到下圖:
[圖片上傳失敗...(image-b6916e-1657458632166)]
到這兒還有很多的非數(shù)據(jù)元素需要改動(dòng)远搪,需要用到theme函數(shù),原圖的背景版是白的逢捺,我們需要panel.background參數(shù)來設(shè)置背景版谁鳍,同時(shí)我希望整幅圖的title居中加粗,plot.title可以實(shí)現(xiàn)我的需求劫瞳,同理我們需要修正坐標(biāo)軸得用到axis.line棠耕,axis.title和axis.text,需要修改坐標(biāo)軸上的小標(biāo)可以用axis.ticks等等柠新;
上面提到的這些都叫做非數(shù)據(jù)繪圖元素,對(duì)于每一種元素都有對(duì)應(yīng)的元素函數(shù)辉巡,比如element_line(改變相應(yīng)元素的線條類型)恨憎,element_text(改變相應(yīng)元素的文本,包括大小郊楣,粗細(xì)...)等等:
Each element is associated with an element function, which describes the visual properties of the element. For example, element_text() sets the font size, colour and face of text elements like plot.title.
限于本文的篇幅憔恳,也沒法給大家介紹的很詳細(xì),大家可以搜搜這本書《ggplot2: Elegant Graphics for Data Analysis》净蚤,網(wǎng)上都有免費(fèi)的钥组,感興趣的同學(xué)可以去閱讀學(xué)習(xí),到這兒今瀑,我們的代碼寫出如下:
theme(
plot.margin = unit(c(1, 1, 1, 1), "cm"),
panel.background = element_blank(),
plot.title = element_text(size = 22, face = "bold",
hjust = 0.5,
margin = margin(b = 15)),
axis.line = element_line(color = "black"),
axis.title = element_text(size = 22, color = "black",
face = "bold"),
axis.text = element_text(size = 22, color = "black"),
axis.text.x = element_text(margin = margin(t = 10)),
axis.text.y = element_text(size = 17),
axis.title.y = element_text(margin = margin(r = 10)),
axis.ticks.x = element_blank(),
legend.position = c(0.20, 0.8),
legend.background = element_rect(color = "black"),
legend.text = element_text(size = 15),
legend.margin = margin(t = 5, l = 5, r = 5, b = 5),
legend.key = element_rect(color = NA, fill = NA)
)
到此程梦,運(yùn)行上面的代碼后得到下圖:
[圖片上傳失敗...(image-b282ab-1657458632166)]
基本上和APA官網(wǎng)上的示例格式一樣了,示例完成橘荠!
ggsci的使用
接下來介紹ggsci屿附,這是一個(gè)比較高級(jí)的雜志配色板:
ggsci offers a collection of high-quality color palettes inspired by colors used in scientific journals, data visualization libraries, science fiction movies, and TV shows.
這么說吧,你圖畫好了哥童,像按照雜志配色挺份,就使用這個(gè)包就行,十分簡(jiǎn)單好用贮懈,這個(gè)包提供包括自然出版集團(tuán)Nature Publishing Group匀泊,美國(guó)科學(xué)促進(jìn)會(huì)American Association for the Advancement of Science,新英格蘭雜志The New England Journal of Medicine朵你,還有jama各聘,Lancet等等頂級(jí)期刊配色,所以想要成為大佬撬呢,得抓緊學(xué)會(huì)使用ggsci了伦吠。
用起來也很簡(jiǎn)單,做好圖之后直接改動(dòng)相應(yīng)的scale就行,比如我剛剛做的圖是用scale_fill_manual來定義顏色的毛仪,我直接將這行代碼改為scale_fill_aaas搁嗓,我就可以得到Science雜志的配色如下:
[圖片上傳失敗...(image-88c02-1657458632166)]
Science配色
改為scale_fill_npg,我便可以得到nature雜志的配色:
[圖片上傳失敗...(image-505e83-1657458632166)]
nature雜志配色
改為scale_fill_nejm箱靴,我便可以得到新英格蘭醫(yī)學(xué)雜志的配色:
[圖片上傳失敗...(image-300ef3-1657458632166)]
NEJM配色
不得不說高端雜志的調(diào)色盤腺逛,還是挺好看的。
有沒有一種看了上面的內(nèi)容感覺發(fā)Science有望的感覺衡怀,如果有棍矛,請(qǐng)收藏本文并轉(zhuǎn)發(fā)擴(kuò)散,謝謝大家啦抛杨,如果還沒有也請(qǐng)收藏本文够委,說不定下次再回看就有了,哈哈哈哈怖现。
祝福大家早日成為大佬茁帽。
小結(jié)
今天結(jié)合一個(gè)畫圖示例,給大家整理了些許的ggplot2作圖思路和配色的操作屈嗤,如果每有g(shù)gplot原理的掌握的話估計(jì)看起來還是比較吃力潘拨,基本原理大家隨意搜搜都能搜得到資源的。
感謝大家耐心看完饶号,自己的文章都寫的很細(xì)铁追,重要代碼都在原文中,請(qǐng)轉(zhuǎn)發(fā)本文到朋友圈后私信回復(fù)“數(shù)據(jù)鏈接”獲取所有數(shù)據(jù)和本人收集的學(xué)習(xí)資料茫船。如果對(duì)您有用請(qǐng)先記得收藏琅束,再點(diǎn)贊分享。
也歡迎大家的意見和建議算谈,大家想了解什么統(tǒng)計(jì)方法都可以在文章下留言狰闪,說不定我看見了就會(huì)給你寫教程哦,有疑問歡迎私信濒生,有合作意向請(qǐng)直接滴滴我埋泵。