關(guān)于diamonds數(shù)據(jù)集
ggplot2內(nèi)置數(shù)據(jù)集轩猩,包含53940顆鉆石的信息。
carat:克拉
cut:切割質(zhì)量
color:顏色等級(jí)
clarity:純凈度等級(jí)
depth:深度比例
table:鉆石頂部相對(duì)于最寬點(diǎn)的寬度
price:價(jià)格
"x" "y" "z" :長(zhǎng)寬深
↑以上來自幫助文檔?diamonds
統(tǒng)計(jì)變換函數(shù)和幾何對(duì)象函數(shù)
統(tǒng)計(jì)變換:繪圖時(shí)用來計(jì)算新數(shù)據(jù)的算法叫做統(tǒng)計(jì)變換stat
geom_bar做出的圖縱坐標(biāo)為count吗氏,是計(jì)算的新數(shù)據(jù)。
geom_bar的默認(rèn)統(tǒng)計(jì)變換是stat_count柠衅,stat_count會(huì)計(jì)算出兩個(gè)新變量-count(計(jì)數(shù))和prop(proportions合愈,比例)炸客。
每個(gè)幾何對(duì)象函數(shù)都有一個(gè)默認(rèn)的統(tǒng)計(jì)變換绒北,每個(gè)統(tǒng)計(jì)變換函數(shù)都又一個(gè)默認(rèn)的幾何對(duì)象适贸。
如:用幾何對(duì)象函數(shù)geom_bar作直方圖灸芳,默認(rèn)統(tǒng)計(jì)變換是stat_count,
用統(tǒng)計(jì)變換函數(shù)stat_count做計(jì)數(shù)統(tǒng)計(jì)圖拜姿,默認(rèn)幾何對(duì)象是直方圖烙样。
這兩者是等價(jià)的
為什么要使用某種統(tǒng)計(jì)變換?
1.覆蓋默認(rèn)的統(tǒng)計(jì)變換
直方圖默認(rèn)的統(tǒng)計(jì)變換是stat_count,也就是統(tǒng)計(jì)計(jì)數(shù)蕊肥。當(dāng)需要直接用原表格的數(shù)據(jù)作圖時(shí)就會(huì)需要覆蓋默認(rèn)的谒获。
demo <- tribble( ~cut, ~freq, "Fair", 1610, "Good", 4906, "Very Good", 12082, "Premium", 13791, "Ideal", 21551 )
#新建表格并賦值給demo
ggplot(data = demo) + geom_bar(mapping = aes(x = cut, y = freq), stat = "identity")
這里直接用頻數(shù)表作圖不需要再統(tǒng)計(jì)變換了,于是用stat = "identity"覆蓋默認(rèn)的統(tǒng)計(jì)變換
2.Y軸可以用比例來表示
直方圖默認(rèn)的y軸是x軸的計(jì)數(shù)壁却。此例子中x軸是是五種cut(切割質(zhì)量)究反,直方圖自動(dòng)統(tǒng)計(jì)了這五種質(zhì)量的鉆石的統(tǒng)計(jì)計(jì)數(shù),當(dāng)你不想使用計(jì)數(shù)儒洛,而是想顯示各質(zhì)量等級(jí)所占比例的時(shí)候就需要用到prop。
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))
注意:1. y = ..prop..狼速;
2.group=1的意思是把所有鉆石作為一個(gè)整體琅锻,顯示五種質(zhì)量的鉆石所占比例體現(xiàn)出來。如果不加這一句向胡,就是每種質(zhì)量的鉆石各為一組來計(jì)算恼蓬,那么比例就都是100%,顯示五根大黑柱子僵芹。
3.在代碼中強(qiáng)調(diào)統(tǒng)計(jì)變換处硬。
以stat_summary為例。
ggplot(data = diamonds) + stat_summary( mapping = aes(x = cut, y = depth), fun.ymin = min, fun.ymax = max, fun.y = median )
(小潔碎碎念:stat_summary的默認(rèn)幾何圖形是geom_pointrange,而這個(gè)geom_pointrange默認(rèn)的統(tǒng)計(jì)變換卻是identity拇派,如果你不知道其中貓膩荷辕,就會(huì)發(fā)現(xiàn)他倆代碼竟然不可逆凿跳。。疮方。一夫多妻的節(jié)奏呀控嗜。)
因此要用幾何對(duì)象函數(shù)重復(fù)這個(gè)圖形,則需要指定stat_summary骡显。
ggplot(data = diamonds) + geom_pointrange( mapping = aes(x = cut, y = depth), stat = "summary", fun.ymin = min, fun.ymax = max, fun.y = median )
位置調(diào)整-position
在直方圖中疆栏,顏色映射是由color和fill之分的,表示邊框和填充惫谤。如果要設(shè)置無填充(也就是透明)壁顶,則fill=NA。NA在數(shù)據(jù)框里表示空值溜歪。
1.直方圖之堆疊式-fill
堆疊式就是在基礎(chǔ)條形圖上添加第三個(gè)變量若专,將這個(gè)變量映射給fill,就會(huì)在每個(gè)條形中分出不同顏色且不同比例的矩形痹愚。
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut,fill=clarity))
除了映射的方式以外富岳,position參數(shù)設(shè)置位置調(diào)整功能。position="fill"也可以設(shè)置拯腮,但這樣設(shè)置的每組堆疊條形具有相同的高度窖式。
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "fill")
筆者補(bǔ)充:感覺這種堆疊方式并不如設(shè)置fill映射,因?yàn)樗怀龅氖潜壤溃拷M之間數(shù)值的差異被忽略了萝喘。
2.直方圖之對(duì)象直接顯示-identity
這個(gè)直方圖是重疊的
3.直方圖之并列式-dodge
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")
3.散點(diǎn)圖之?dāng)_動(dòng)-jitter
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))
添加擾動(dòng)
position參數(shù)設(shè)為jitter的快速實(shí)現(xiàn):geom_jitter()
ggplot(data = mpg) + geom_jitter(mapping = aes(x = displ, y = hwy))
4.stack-堆疊
三琼懊、坐標(biāo)系
(1)coord_flip#翻轉(zhuǎn)坐標(biāo)系
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + geom_boxplot() + coord_flip()
(2)coord_quickmap#為地圖設(shè)置長(zhǎng)寬比此處需要加載maps包阁簸,否則會(huì)報(bào)錯(cuò)。
nz <- map_data("nz")
ggplot(nz, aes(long, lat, group = group)) + geom_polygon(fill = "white", colour = "black")
#geom_polygon 是多邊形圖
ggplot(nz, aes(long, lat, group = group)) + geom_polygon(fill = "white", colour = "black") + coord_quickmap()
(3)coord_polar #極坐標(biāo)系
bar <- ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, fill = cut), show.legend = FALSE, width = 1 ) + theme(aspect.ratio = 1) + labs(x = NULL, y = NULL)
bar + coord_flip()
bar + coord_polar()