这个R教程讲解如何使用R和ggplot2包创建线图。
在一个线图中,观察值都按照x排列并连接起来。
可以使用函数geom_line()、geom_step()或geom_path()。
x值可以是:

ggplot2 line plot - R software and data visualization
这里使用的数据来自数据集ToothGrowth,描述了不同剂量药物下牙齿的生长情况。
df <- data.frame(dose=c("D0.5", "D1", "D2"),
len=c(4.2, 10, 29.5))
head(df)## dose len
## 1 D0.5 4.2
## 2 D1 10.0
## 3 D2 29.5library(ggplot2)
# 带点的基本线图
ggplot(data=df, aes(x=dose, y=len, group=1)) +
geom_line()+
geom_point()
# 改变线型
ggplot(data=df, aes(x=dose, y=len, group=1)) +
geom_line(linetype = "dashed")+
geom_point()
# 改变颜色
ggplot(data=df, aes(x=dose, y=len, group=1)) +
geom_line(color="red")+
geom_point()


阅读更多线型 : ggplot2 line types[1]
你可以使用grid包为线条添加一个箭头:
library(grid)
# 添加箭头
ggplot(data=df, aes(x=dose, y=len, group=1)) +
geom_line(arrow = arrow())+
geom_point()
# 添加一个封闭的箭头
myarrow=arrow(angle = 15, ends = "both", type = "closed")
ggplot(data=df, aes(x=dose, y=len, group=1)) +
geom_line(arrow=myarrow)+
geom_point()

观察值还可以使用函数geom_step()或geom_path() 进行连接:
ggplot(data=df, aes(x=dose, y=len, group=1)) +
geom_step()+
geom_point()
ggplot(data=df, aes(x=dose, y=len, group=1)) +
geom_path()+
geom_point()

数据还是使用ToothGrowth数据集:
df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
dose=rep(c("D0.5", "D1", "D2"),2),
len=c(6.8, 15, 33, 4.2, 10, 29.5))
head(df2)## supp dose len
## 1 VC D0.5 6.8
## 2 VC D1 15.0
## 3 VC D2 33.0
## 4 OJ D0.5 4.2
## 5 OJ D1 10.0
## 6 OJ D2 29.5在下面的图中,两个组别线型、颜色和大小都是相同的。
# 有多个组别的线图
ggplot(data=df2, aes(x=dose, y=len, group=supp)) +
geom_line()+
geom_point()
# 改变线型
ggplot(data=df2, aes(x=dose, y=len, group=supp)) +
geom_line(linetype="dashed", color="blue", size=1.2)+
geom_point(color="red", size=3)

下面图中,组别的线型、点类型都是根据变了supp自动控制的:
# 按组别 (supp) 改变线型
ggplot(df2, aes(x=dose, y=len, group=supp)) +
geom_line(aes(linetype=supp))+
geom_point()
# 改变线型和点的类型
ggplot(df2, aes(x=dose, y=len, group=supp)) +
geom_line(aes(linetype=supp))+
geom_point(aes(shape=supp))

也可以使用函数 **scale_linetype_manual()**手动更改线型。
# 手动设置线型
ggplot(df2, aes(x=dose, y=len, group=supp)) +
geom_line(aes(linetype=supp))+
geom_point()+
scale_linetype_manual(values=c("twodash", "dotted"))
阅读更多线型: ggplot2 line types[2]
如果你想要更改点的类型,阅读文章 ggplot2 point shapes[3]。
线条颜色也可以由变量自动控制:
p<-ggplot(df2, aes(x=dose, y=len, group=supp)) +
geom_line(aes(color=supp))+
geom_point(aes(color=supp))
p
也可以使用下面的函数手动设置线条颜色:
# 使用自定义的调色板
p+scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))
# 使用brewer调色板
p+scale_color_brewer(palette="Dark2")
# 使用灰色值
p + scale_color_grey() + theme_classic()


阅读更多关于ggplot2颜色 : ggplot2 colors[4]
p <- p + scale_color_brewer(palette="Paired")+
theme_minimal()
p + theme(legend.position="top")
p + theme(legend.position="bottom")
# 移除图例
p + theme(legend.position="none")


legend.position参数允许的值包括“left”,“top”, “right”, “bottom”。
阅读ggplot2图例: ggplot2 legend[5]
如果x轴的变量是数值型,我可以可以将它根据自己的需要看做连续值或转换为因子变量。
# 创建一些数据
df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
dose=rep(c("0.5", "1", "2"),2),
len=c(6.8, 15, 33, 4.2, 10, 29.5))
head(df2)## supp dose len
## 1 VC 0.5 6.8
## 2 VC 1 15.0
## 3 VC 2 33.0
## 4 OJ 0.5 4.2
## 5 OJ 1 10.0
## 6 OJ 2 29.5# x 轴看做连续变量
df2$dose <- as.numeric(as.vector(df2$dose))
ggplot(data=df2, aes(x=dose, y=len, group=supp, color=supp)) +
geom_line() + geom_point()+
scale_color_brewer(palette="Paired")+
theme_minimal()
# x轴看做离散变量
df2$dose<-as.factor(df2$dose)
ggplot(data=df2, aes(x=dose, y=len, group=supp, color=supp)) +
geom_line() + geom_point()+
scale_color_brewer(palette="Paired")+
theme_minimal()

这里是有economics数据集:
head(economics)## date pce pop psavert uempmed unemploy
## 1 1967-06-30 507.8 198712 9.8 4.5 2944
## 2 1967-07-31 510.9 198911 9.8 4.7 2945
## 3 1967-08-31 516.7 199113 9.0 4.6 2958
## 4 1967-09-30 513.3 199311 9.8 4.9 3143
## 5 1967-10-31 518.5 199498 9.7 4.7 3066
## 6 1967-11-30 526.2 199657 9.4 4.8 3018绘图:
# 基本的线图
ggplot(data=economics, aes(x=date, y=pop))+
geom_line()
# 绘制子集
ggplot(data=subset(economics, date > as.Date("2006-1-1")),
aes(x=date, y=pop))+geom_line()

改变线的大小:
# Change line size
ggplot(data=economics, aes(x=date, y=pop, size=unemploy/pop))+
geom_line()
下面函数为每一个组别计算感兴趣变量的均值和标准差:
#+++++++++++++++++++++++++
# Function to calculate the mean and the standard deviation
# for each group
#+++++++++++++++++++++++++
# data : a data frame
# varname : the name of a column containing the variable
#to be summariezed
# groupnames : vector of column names to be used as
# grouping variables
data_summary <- function(data, varname, groupnames){
require(plyr)
summary_func <- function(x, col){
c(mean = mean(x[[col]], na.rm=TRUE),
sd = sd(x[[col]], na.rm=TRUE))
}
data_sum<-ddply(data, groupnames, .fun=summary_func,
varname)
data_sum <- rename(data_sum, c("mean" = varname))
return(data_sum)
}汇总数据:
df3 <- data_summary(ToothGrowth, varname="len",
groupnames=c("supp", "dose"))
head(df3)## supp dose len sd
## 1 OJ 0.5 13.23 4.459709
## 2 OJ 1.0 22.70 3.910953
## 3 OJ 2.0 26.06 2.655058
## 4 VC 0.5 7.98 2.746634
## 5 VC 1.0 16.77 2.515309
## 6 VC 2.0 26.14 4.797731函数**geom_errorbar()**可以用来生成带误差棒的线图:
# 均值的标准差
ggplot(df3, aes(x=dose, y=len, group=supp, color=supp)) +
geom_errorbar(aes(ymin=len-sd, ymax=len+sd), width=.1) +
geom_line() + geom_point()+
scale_color_brewer(palette="Paired")+theme_minimal()
# 使用position_dodge水平移动误差棒以避免重叠
ggplot(df3, aes(x=dose, y=len, group=supp, color=supp)) +
geom_errorbar(aes(ymin=len-sd, ymax=len+sd), width=.1,
position=position_dodge(0.05)) +
geom_line() + geom_point()+
scale_color_brewer(palette="Paired")+theme_minimal()

# 简单的线图
# 分组改变点型和线型
ggplot(df3, aes(x=dose, y=len, group = supp, shape=supp, linetype=supp))+
geom_errorbar(aes(ymin=len-sd, ymax=len+sd), width=.1,
position=position_dodge(0.05)) +
geom_line() +
geom_point()+
labs(title="Plot of lengthby dose",x="Dose (mg)", y = "Length")+
theme_classic()
# 分组改变颜色
# 添加误差棒
p <- ggplot(df3, aes(x=dose, y=len, group = supp, color=supp))+
geom_errorbar(aes(ymin=len-sd, ymax=len+sd), width=.1,
position=position_dodge(0.05)) +
geom_line(aes(linetype=supp)) +
geom_point(aes(shape=supp))+
labs(title="Plot of lengthby dose",x="Dose (mg)", y = "Length")+
theme_classic()
p + theme_classic() + scale_color_manual(values=c('#999999','#E69F00'))

手动改变颜色:
p + scale_color_brewer(palette="Paired") + theme_minimal()
# 绿色
p + scale_color_brewer(palette="Greens") + theme_minimal()
# 红色
p + scale_color_brewer(palette="Reds") + theme_minimal()


原英文地址:http://www.sthda.com/english/wiki/ggplot2-line-plot-quick-start-guide-r-software-and-data-visualization
[1]ggplot2 line types: http://www.sthda.com/english/wiki/ggplot2-line-types-how-to-change-line-types-of-a-graph-in-r-software
[2]ggplot2 line types: http://www.sthda.com/english/wiki/ggplot2-line-types-how-to-change-line-types-of-a-graph-in-r-software
[3]ggplot2 point shapes: http://www.sthda.com/english/wiki/ggplot2-point-shapes
[4]ggplot2 colors: http://www.sthda.com/english/wiki/ggplot2-colors-how-to-change-colors-automatically-and-manually
[5]ggplot2 legend: http://www.sthda.com/english/wiki/ggplot2-legend-easy-steps-to-change-the-position-and-the-appearance-of-a-graph-legend-in-r-software