R語言-ggplot初級
ggplot2簡介:
在2005年開始出現,吸取了基礎繪圖系統和lattice繪圖系統的優點,並利用一個強大的模型來對其進行改進,這一模型基於之前所述的一系列準則,
能夠創建任意類型的統計圖形
1.導入包
library(maps)
library(maptools)
library(rgdal)
library(plyr)
library(MASS)
library(dplyr)
library(ggplot2)
案例1:鉆石數據集
采用ggplot2自帶的鉆石數據集.
數據集變量簡介
## 主要變量 ## price 價格 ## color 顏色 ## carat 重量## cut 切工
1.1 使用qplot進行簡單的快速作圖
set.seed(123) # 從整個數據集取出100行進行分析 dsmall <- diamonds[sample(nrow(diamonds), 100), ] dim(dsmall) # 1.1.1根據x和y和數據集自動作圖 qplot(carat, price, data = diamonds) # 1.1.2根據log x和log y和數據集,自動作圖 qplot(log(carat), log(price), data = diamonds) # 1.1.3根據x和y和數據集按照color進行分類,自動作圖qplot(carat, price, data = dsmall, colour = color) # 1.1.4根據x和y和數據集按照shape進行分類,自動作圖 qplot(carat, price, data = dsmall, shape = cut) # 1.1.5根據x和y和數據集,指定作圖的類型,自動作圖 qplot(carat, price, data = dsmall, geom = c("point", "smooth")) # 1.1.6根據x和y和數據集,做箱線圖 qplot(cut, price / carat, data = diamonds, geom = "boxplot") # 1.1.7根據x和y和數據集,做條形圖 qplot(color, data = diamonds, geom = "bar") # 1.1.8根據x和y和數據集,做直方圖 qplot(carat, data = diamonds, geom = "histogram") # 1.1.9根據x和y和數據集,做核密度圖 qplot(carat, data = diamonds, geom = "density")
圖 1.1.1 圖 1.1.2 圖 1.1.3
圖 1.1.4 圖 1.1.5 圖 1.1.6
圖 1.1.7 圖 1.1.8 圖1.1.9
1.2使用qplot進行分組
# 1.1.10 使用facets對需要分組的字段進行分組 qplot(carat, data = diamonds, facets = color ~ ., geom = "histogram", binwidth = 0.1, xlim = c(0, 3)) # 1.1.11 給圖形添加信息 qplot( carat, price, data = dsmall, xlab = "Price ($)", ylab = "Weight (carats)", main = "Price-weight relationship" )
圖 1.1.10 按照不同的顏色對重量進行統計 圖 1.1.11 添加和標題,X軸,Y軸解釋
案例2:地圖(不包含中國)
ggplot是基於圖層進行作圖的
df <- data.frame(x = rnorm(2000), y = rnorm(2000)) norm <- ggplot(df, aes(x, y)) norm # 圖層1 norm + geom_point() # 圖層2
# 改變點的大小和形狀 norm + geom_point(shape = 1) norm + geom_point(shape = ".")
圖層 1 圖層 2 圖層3
采用ggplot2自帶的美國城市數據集us.city
數據集變量簡介
## name 城市名稱 ## country.etc 簡稱 ## pop 人口數量 ## lat 緯度 ## lon 經度 ## capital 是否是首府
2.1找出美國人口大於500000的城市
big_cities <- subset(us.cities, pop > 500000) qplot(long, lat, data = big_cities) + borders("state", size = 0.5)
圖 2.1
2.2 做出德州地圖
tx_cities <- subset(us.cities, country.etc == "TX") # 在使用map做地圖的時候,記住x和y一定指的是經緯度 ggplot(tx_cities, aes(long, lat)) + borders("county", "texas", colour = "grey70") + geom_point(colour = alpha("black", 0.5))
圖 2.2 德州地圖
2.3結合USAssert來做出美國各個州的犯罪率
# 從map中獲取洲數據 states <- map_data("state") # 獲取犯罪數據 arrests <- USArrests # 將犯罪的數據列名轉換為小寫 names(arrests) <- tolower(names(arrests)) # 獲取根據行名獲取區域數據 arrests$region <- tolower(rownames(USArrests)) # 將兩個數據集進行合並 choro <- merge(states, arrests, by = "region") # 按犯罪率升序排列 choro <- choro[order(choro$order), ] # 2.3.1 犯罪率的分布 qplot(long, lat, data = choro, group = group,fill = assault, geom = "polygon") # 2.3.2 謀殺率的分布 qplot(long, lat, data = choro, group = group, fill = assault / murder, geom = "polygon")
圖 2.3.1 結論:越往東北犯罪率越低 圖 2.3.2 結論:越往西北謀殺率越低
案例3:中國地圖
3.1 做出各個省份人口的數量
# 載入中國地圖數據集
china=readShapePoly(‘E:\\Udacity\\Data Analysis High\\R\\R_Study\\第一天數據\\bou2_4p.shp‘)
# 獲取數據 x<-china@data
# 轉換為datafarme xs<-data.frame(x,id=seq(0:924)-1)
# 將china轉換為datafarme shapefile_df <- fortify(china)
# 組合成完整的dataframe
china_mapdata<-join(shapefile_df, xs, type = "full")
# 省份名稱
NAME<-c("北京市","天津市","河北省","山西省","內蒙古自治區","遼寧省","吉林省",
"黑龍江省","上海市","江蘇省","浙江省","安徽省","福建省", "江西省","山東省","河南省",
"湖北省", "湖南省","廣東省", "廣西壯族自治區","海南省", "重慶市","四川省", "貴州省",
"雲南省","西藏自治區","陜西省","甘肅省","青海省","寧夏回族自治區","新疆維吾爾自治區",
"臺灣省","香港特別行政區")
# 各個省份的人口
pop<-c(7355291,3963604,20813492,10654162,8470472,15334912,9162183,13192935,8893483,25635291,20060115,19322432,11971873,11847841,30794664,26404973,
17253385,19029894,32222752,13467663,2451819,10272559,26383458,10745630,
12695396,689521,11084516,7113833,1586635,1945064,6902850,23193638,7026400)
# 組合成完整的d人口-省份的dataframe
pop<-data.frame(NAME,pop)
# 和中國的地圖信息相結合,組合成datdaframe
china_pop<-join(china_mapdata, pop, type = "full")
ggplot(china_pop, aes(x = long, y = lat, group = group,fill=pop))+
geom_polygon( )+
geom_path(colour = "grey40")
圖3.1 結論顏色越淺的的省份人口越多
3.2 做出上海市的地圖
# 使用subset來取出上海市的信息
SH<-subset(china_mapdata,NAME=="上海市") ggplot(SH, aes(x = long, y = lat, group = group,fill=NAME))+ geom_polygon(fill="lightblue" )+ geom_path(colour = "grey40")+ ggtitle("中華人民共和國上海市")+ annotate("text",x=121.4,y=31.15,label="上海市")
圖 3.2
案例4:時間數據
采用ggplot2自帶的economics數據集
數據集變量簡介
## date 時間 ## pop 人口 ## uempmed 失業率 ## unemploy 失業人數
4.1 通過時間查看失業率
ggplot(aes(x=date,y=uempmed),data=economics)+
geom_line()
圖4.1 圖層1
4.2查看不同政黨執政時期的失業率
# 獲取失業率的折線圖 圖層1 (unemp <- qplot(date, unemploy, data=economics, geom="line",xlab = "", ylab = "No. unemployed (1000s)")) # 由於是1970年開始,所以去掉前三行,從尼克松開始統計 presidential1 <- presidential[-(1:3), ] #確定x和y的邊界 yrng <- range(economics$unemploy) xrng <- range(economics$date) # 圖層2 unemp + geom_vline(aes(xintercept = start), data = presidential) # 圖層3 unemp + geom_rect(aes(NULL, NULL, xmin = start, xmax = end, fill = party), ymin = yrng[1], ymax = yrng[2], data = presidential1) + scale_fill_manual(values = alpha(c("blue", "red"), 0.2))
4.2 圖層2 圖層 3
5.作圖其他設置
5.1 疊加多個圖形
# 美國5大湖之一的休倫湖數據集
huron <- data.frame(year = 1875:1972, level = LakeHuron) ggplot(huron, aes(year)) + geom_line(aes(y = level - 5), colour = "blue") + geom_line(aes(y = level ), colour = "black") + geom_line(aes(y = level + 5), colour = "red")
圖5.1
5.2 顏色設置
# 使用mtcars數據集
# 制定樂填充色red和邊框色black ggplot(birthwt, aes(x=bwt)) + geom_histogram(fill="red", colour="black") # 將cyl轉變為因子 mtcars$cyl <- factor(mtcars$cyl) # 對不同的ctl進行繪圖 ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point()
圖 5.2.1 圖 5.2.2
5.3 圖例
# 采用的是植物數據集 p <- ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() # 5.3.1 默認的圖例放在右邊
p # 5.3.2 不使用圖例 p + guides(fill=FALSE)
# 5.3.3 將圖例放在頂部 p + theme(legend.position="top")
# 5.3.4 指定圖例的位置 p + theme(legend.position=c(1,0), legend.justification=c(1,0))
圖 5.3.1 圖 5.3.2
圖 5.3.3 圖 5.4.4
github:https://github.com/Mounment/R-Project
R語言-ggplot初級