筆者邀請您,先思考:
1 折線圖有什么作用?如何畫折線圖
折線圖(Line chart)是將數(shù)據(jù)表示為一系列稱為“標(biāo)記”的數(shù)據(jù)點,數(shù)據(jù)點之間由線段連接而成。它是類似散點圖,除了測量點是有序的且用直線段連接。它是許多領(lǐng)域中常見的基本圖表類型。
一 基本折線圖
折線圖
1# 加載R包
2library(ggplot2)
3
4# 構(gòu)造數(shù)據(jù)集
5df <- data.frame(dose=c('D0.5', 'D1', 'D2'),
6 len=c(4.2, 10, 29.5))
7
8# 1 基本折線圖
9ggplot(data=df, aes(x=dose, y=len, group=1))
10 geom_line()
11 geom_point()
12
13# 2 改變線的類型
14ggplot(data=df, aes(x=dose, y=len, group=1))
15 geom_line(linetype = 'dashed')
16 geom_point()
17
18# 3 改變線的顏色
19ggplot(data=df, aes(x=dose, y=len, group=1))
20 geom_line(color='red')
21 geom_point()
22
1的圖形結(jié)果:
2的圖形結(jié)果:
3的圖形結(jié)果:
二 折線圖上添加箭頭
1# 1 添加箭頭
2library(grid)
3ggplot(data=df, aes(x=dose, y=len, group=1))
4 geom_line(arrow = arrow())
5 geom_point()
6
7# 2 折線圖兩端添加箭頭
8myarrow <- arrow(angle = 15, ends = 'both', type = 'closed')
9ggplot(data=df, aes(x=dose, y=len, group=1))
10 geom_line(arrow=myarrow)
11 geom_point()
12
1的圖形結(jié)果:
2的圖形結(jié)果:
三 分組折線圖
1df2 <- data.frame(supp=rep(c('VC', 'OJ'), each=3),
2 dose=rep(c('D0.5', 'D1', 'D2'),2),
3 len=c(6.8, 15, 33, 4.2, 10, 29.5))
4#1 多組折線圖
5ggplot(data=df2, aes(x=dose, y=len, group=supp))
6 geom_line()
7 geom_point()
8#2 改變直線類型
9ggplot(data=df2, aes(x=dose, y=len, group=supp))
10 geom_line(linetype='dashed', color='blue', size=1.2)
11 geom_point(color='red', size=3)
12
1的圖形結(jié)果:
2的圖形結(jié)果:
四 利用分組改變折線的類型
1#1 通過分組改變線的類型
2ggplot(df2, aes(x=dose, y=len, group=supp))
3 geom_line(aes(linetype=supp))
4 geom_point()
5
6#2 通過分組改變線的類型和點的形狀
7ggplot(df2, aes(x=dose, y=len, group=supp))
8 geom_line(aes(linetype=supp))
9 geom_point(aes(shape=supp))
1的圖形結(jié)果:
2的圖形結(jié)果:
五 使用函數(shù)scale_linetype_manual()手動更改線的類型
1# 手動設(shè)置線的類型
2ggplot(df2, aes(x=dose, y=len, group=supp))
3 geom_line(aes(linetype=supp))
4 geom_point()
5 scale_linetype_manual(values=c('twodash', 'dotted'))
圖形結(jié)果:
六 分組改變線的顏色
1# 改變線的顏色
2
3p <- ggplot(df2, aes(x=dose, y=len, group=supp))
4 geom_line(aes(color=supp))
5 geom_point(aes(color=supp))
6p
7
圖形結(jié)果:
七 利用函數(shù)手動改變線的顏色
1# 1 自定義調(diào)色板
2p scale_color_manual(values=c('#999999', '#E69F00', '#56B4E9'))
3# 2 使用現(xiàn)成的調(diào)色板
4p scale_color_brewer(palette='Dark2')
5# 3 使用灰度
6p scale_color_grey() theme_classic()
1的圖形結(jié)果:
2的圖形結(jié)果:
3的圖形結(jié)果:
八 改變折線圖的圖例默認(rèn)位置
1p <- p scale_color_brewer(palette='Paired')
2 theme_minimal()
3# 1 圖例在上方
4p theme(legend.position='top')
5# 2 圖例在下方
6p theme(legend.position='bottom')
7# 3 移除圖例
8p theme(legend.position='none')
1的圖形結(jié)果:
2的圖形結(jié)果:
3的圖形結(jié)果:
九 x軸是連續(xù)值的折線圖
1df2 <- data.frame(supp=rep(c('VC', 'OJ'), each=3),
2 dose=rep(c('0.5', '1', '2'),2),
3 len=c(6.8, 15, 33, 4.2, 10, 29.5))
4
5# x軸作為連續(xù)變量
6df2$dose <- as.numeric(as.vector(df2$dose))
7ggplot(data=df2, aes(x=dose, y=len, group=supp, color=supp))
8 geom_line()
9 geom_point()
10 scale_color_brewer(palette='Paired')
11 theme_minimal()
圖形結(jié)果:
十 x軸是日期的折線圖
1head(economics)
2ggplot(data=economics, aes(x=date, y=pop))
3 geom_line()
圖形結(jié)果:
十一 帶有誤差條的折線圖
1data_summary <- function(data, varname, groupnames){
2 require(plyr)
3 summary_func <- function(x, col){
4 c(mean = mean(x[[col]], na.rm=TRUE),
5 sd = sd(x[[col]], na.rm=TRUE))
6 }
7 data_sum<-ddply(data, groupnames, .fun=summary_func,
8 varname)
9 data_sum <- rename(data_sum, c('mean' = varname))
10 return(data_sum)
11}
12
13df3 <- data_summary(ToothGrowth, varname='len',
14 groupnames=c('supp', 'dose'))
15
16# 1 均值的標(biāo)準(zhǔn)差
17ggplot(df3, aes(x=dose, y=len, group=supp, color=supp))
18 geom_errorbar(aes(ymin=len-sd, ymax=len sd), width=.1)
19 geom_line()
20 geom_point()
21 scale_color_brewer(palette='Paired')
22 theme_minimal()
23
24
25# 2 使用position_dodge水平移動重疊的誤差條
26ggplot(df3, aes(x=dose, y=len, group=supp, color=supp))
27 geom_errorbar(aes(ymin=len-sd, ymax=len sd), width=.1,
28 position=position_dodge(0.05))
29 geom_line()
30 geom_point()
31 scale_color_brewer(palette='Paired')
32 theme_minimal()
1的圖形結(jié)果:
2的圖形結(jié)果:
十二 自定義折線圖
1# 1 簡單的折線圖
2# 通過分組改變點的形狀和線的類型
3ggplot(df3, aes(x=dose, y=len, group = supp, shape=supp, linetype=supp))
4 geom_errorbar(aes(ymin=len-sd, ymax=len sd), width=.1,
5 position=position_dodge(0.05))
6 geom_line()
7 geom_point()
8 labs(title='Plot of lengthby dose',x='Dose (mg)', y = 'Length')
9 theme_classic()
10
11# 2 分組改變顏色和添加誤差條
12p <- ggplot(df3, aes(x=dose, y=len, group = supp, color=supp))
13 geom_errorbar(aes(ymin=len-sd, ymax=len sd), width=.1,
14 position=position_dodge(0.05))
15 geom_line(aes(linetype=supp))
16 geom_point(aes(shape=supp))
17 labs(title='Plot of lengthby dose',x='Dose (mg)', y = 'Length')
18 theme_classic()
19p theme_classic() scale_color_manual(values=c('#999999','#E69F00'))
20
1的圖形結(jié)果:
2的圖形結(jié)果: