第三篇:R语言数据可视化之条形图
條形圖簡介
數(shù)據(jù)可視化中,最常用的圖非條形圖莫屬,它主要用來展示不同分類(橫軸)下某個數(shù)值型變量(縱軸)的取值。其中有兩點要重點注意:
1. 條形圖橫軸上的數(shù)據(jù)是離散而非連續(xù)的。比如想展示兩商品的價格隨時間變化的走勢,則不能用條形圖,因為時間變量是連續(xù)的;
2. 有時條形圖的值表示數(shù)值本身,但也有時是表示數(shù)據(jù)集中的頻數(shù),不要引起混淆;
繪制基本條形圖
本例選用測試數(shù)據(jù)集如下:
繪制方法是首先調(diào)用ggplot函數(shù)選定數(shù)據(jù)集,并在aes參數(shù)中指明橫軸縱軸。然后調(diào)用條形圖函數(shù)geom_bar(stat="identity")便可繪制出基本條形圖。其中stat="identity"表明取用樣本點對應(yīng)縱軸值,R語言實現(xiàn)代碼如下:
# 基函數(shù):aes綁定條形圖橫軸縱軸 ggplot(pg_mean, aes(x = group, y = weight)) + # 條形圖函數(shù):stat表明取用樣本點對應(yīng)縱軸值 geom_bar(stat = "identity")
運行效果:
如果覺得灰色調(diào)比較難看,可以在條形圖函數(shù)中指定條形圖需要填充的顏色以及條形圖的邊框顏色。R語言實現(xiàn)代碼如下:
# 基函數(shù) ggplot(pg_mean, aes(x = group, y = weight)) + # 條形圖函數(shù):fill設(shè)置條形圖填充色,colour設(shè)置條形圖邊界顏色 geom_bar(stat = "identity", fill = "lightblue", colour = "black")
運行效果:
要強調(diào)的是如果橫軸對應(yīng)數(shù)據(jù)非離散型,則須先將其轉(zhuǎn)為因子類型,否則結(jié)果會出現(xiàn)"空條"。
繪制(簇狀)條形圖
本例選用測試集如下:
繪制方法是在條形圖函數(shù)中設(shè)置fill參數(shù),將數(shù)據(jù)集中表示分類的列賦值給它。R語言實現(xiàn)代碼如下:
# 基函數(shù):fill綁定"美學(xué)特征" ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + # 條形圖函數(shù):position設(shè)置條形圖類型為簇狀 geom_bar(position = "dodge", stat = "identity")
運行效果:
可使用填充標尺函數(shù)scale_fill_brewer(palette)重新選擇配色,并為條狀加上黑色邊框。R語言實現(xiàn)代碼如下:
# 基函數(shù) ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + # 條形圖函數(shù) geom_bar(position = "dodge", stat = "identity", colour = "black") + # 調(diào)色標尺:設(shè)置調(diào)色板為Pastel1 scale_fill_brewer(palette="Pastel1")
運行效果:
繪制頻數(shù)條形圖
選用測試數(shù)據(jù)集如下:
本例需要展示的是不同cut類型變量的樣本個數(shù),要實現(xiàn)這點關(guān)鍵在于將stat參數(shù)設(shè)置為bin。之前將stat設(shè)置為identity是直接展示樣本點綁定的縱軸值,而設(shè)置為bin則會統(tǒng)計樣本點落到橫軸上各離散值的個數(shù),這種情況下ggplot的aes參數(shù)只需綁定橫軸。R語言實現(xiàn)代碼如下:
# 基函數(shù) ggplot(diamonds, aes(x = cut)) + # 條形圖函數(shù):stat參數(shù)默認為bin geom_bar(fill = "lightblue", colour = "black")
執(zhí)行效果:
如果橫軸是連續(xù)變量,那么這張圖就會變成直方圖。和將來要講的geom_histogram()函數(shù)效果是一樣的。
對正負條形圖分別著色
本例測試數(shù)據(jù)集如下:
如若現(xiàn)在需要繪制出數(shù)據(jù)集中Anomaly10y列隨時間的變化,同時可視化方面要求做到小于0的用藍色表示,大于0的用紅色表示。
對于這種情況可為數(shù)據(jù)集創(chuàng)建一個輔助列pos,該列為布爾類型:TRUE表示Anomaly10y屬性大于0,而FALSE表示Anomaly10y列小于0。之后原數(shù)據(jù)集便多了一個pos列,表征Anomaly10y列值大于等于/小于0。然后將這個字段fiil到ggplot函數(shù),再調(diào)用標尺函數(shù)對配色進行自定義并令guide=FALSE取消圖例。R語言實現(xiàn)代碼如下:
# 增加輔助列,表示當前記錄Anomaly10y值大于/小于0。
csub$pos = csub$Anomaly10y >= 0
# 基函數(shù)
ggplot(csub, aes(x = Year, y = Anomaly10y, fill = pos)) +
# 條形圖函數(shù):position設(shè)置為"identity"是為了避免系統(tǒng)因繪制負值條形而引發(fā)的警告
geom_bar(stat = "identity", position = "identity", colour = "black", size = 0.1) +
# 手動調(diào)色標尺:大于0為紅,小于0為藍
scale_fill_manual(values = c("#CCEEFF", "#FFDDDD"), guide = FALSE)
運行效果:
繪制(百分比)堆積型條形圖
本例測試數(shù)據(jù)集如下:
使用ggplot2繪制條形圖時,只要不修改geom_bar()函數(shù)的position參數(shù),所得條形圖便為堆積型。但堆積條形圖縱軸大都采用百分比形式,故在具體繪制前,需要對原數(shù)據(jù)集進行預(yù)處理,將縱軸數(shù)據(jù)轉(zhuǎn)換為分類百分比格式。
本例要統(tǒng)計c39和c52兩個品種在不同日期下的重量對比,則需首先將各記錄的Weight值除以該記錄所在類目的Weight和,然后再將新的百分比列綁定到縱軸。R語言實現(xiàn)代碼如下:
# 計算Weight列的分類百分比列 library(plyr) ce = ddply(cabbage_exp, "Date", transform, percent_weight = Weight / sum(Weight) * 100) # 基函數(shù) ggplot(ce, aes(x = Date, y = percent_weight, fill = Cultivar)) + # 條形圖函數(shù):未將position參數(shù)顯示設(shè)置為dodge,則繪制出的條形圖為堆積型 geom_bar(stat = "identity", colour = "black") + # 調(diào)色標尺 scale_fill_brewer(palette = "Pastel1")
運行效果:
添加數(shù)據(jù)標簽
本例測試數(shù)據(jù)集如下:
為了給條形圖添加標簽顯示縱軸值,關(guān)鍵在于gemo_text()函數(shù)。使用這個函數(shù)時,需要在它的aes參數(shù)里綁定各樣本的橫縱坐標,以及要展示的值。
下面首先來展示不同Cultivar分類在不同日期下Weight的對比簇狀條形圖。R語言實現(xiàn)代碼如下:
# 基函數(shù) ggplot(cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar)) + # 條形圖函數(shù) geom_bar(stat = "identity", position = "dodge") + # 標簽函數(shù):label設(shè)置展示標簽,vjust設(shè)置標簽偏移(正上負下),position設(shè)置各標簽的間距 geom_text(aes(label = Weight), vjust = 1.5, colour = "white", position = position_dodge(.9), size = 5)
運行結(jié)果:
特別要注意的是geom_text()函數(shù)的position參數(shù),繪制簇狀圖必須通過該參數(shù)指定各標簽的間距。否則一個簇的所有標簽都會堆到同一橫軸坐標上,像下面這樣:
如果要在堆積狀的條形圖上打標簽,則稍微復(fù)雜一點。因為要對每組數(shù)據(jù)進行求和及居中化處理,才能更好的展示出結(jié)果。其中關(guān)鍵點在于使用ggplot庫提供的ddply方法對分組變量進行匯總求和。具體R語言實現(xiàn)代碼如下:
# 根據(jù)日期和性別對數(shù)據(jù)進行排序 ce = arrange(cabbage_exp, Date, Cultivar) # 對不同Date分組內(nèi)的數(shù)據(jù)進行累加求和 ce = ddply(ce, "Date", transform, label_y = cumsum(Weight) - 0.5*Weight) # 基函數(shù) ggplot(ce, aes(x = Date, y = Weight, fill = Cultivar)) + # 條形圖函數(shù) geom_bar(stat = "identity", colour = "black") + # 標簽函數(shù):paste和format方法對標簽進行格式化 geom_text(aes(y=label_y, label = paste(format(Weight, nsmall=2), "kg")), size = 4) + # 圖例函數(shù):反轉(zhuǎn)圖例 guides(fill = guide_legend(reverse = TRUE)) + # 調(diào)色標尺 scale_fill_brewer(palette = "Pastel1")
運行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的第三篇:R语言数据可视化之条形图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 ABAP 代码向百度网站发起请求并
- 下一篇: PPT嵌入字体的方法