R的ggplot2包画折线图?

By 陆勤 at 2019-02-27 • 0人收藏 • 361人看过

折线图(Line chart)是将数据表示为一系列称为“标记”的数据点,数据点之间由线段连接而成。它是类似散点图,除了测量点是有序的且用直线段连接。它是许多领域中常见的基本图表类型。


一 基本折线图

# 加载R包
library(ggplot2)

# 构造数据集
df <- data.frame(dose=c("D0.5", "D1", "D2"),
                 len=c(4.2, 10, 29.5))

# 1 基本折线图
ggplot(data=df, aes(x=dose, y=len, group=1)) +
  geom_line()+
  geom_point()

# 2 改变线的类型
ggplot(data=df, aes(x=dose, y=len, group=1)) +
  geom_line(linetype = "dashed")+
  geom_point()

# 3 改变线的颜色
ggplot(data=df, aes(x=dose, y=len, group=1)) +
  geom_line(color="red")+
  geom_point()

1的图形结果:

折线图1.png

2的图形结果:

折线图2.png

3的图形结果:

折线图3.png


二 折线图上添加箭头

# 1 添加箭头
library(grid)
ggplot(data=df, aes(x=dose, y=len, group=1)) +
  geom_line(arrow = arrow())+
  geom_point()
  
# 2 折线图两端添加箭头
myarrow <- arrow(angle = 15, ends = "both", type = "closed")
ggplot(data=df, aes(x=dose, y=len, group=1)) +
  geom_line(arrow=myarrow)+
  geom_point()

1的图形结果:

折线图4.png

2的图形结果:

折线图5.png

三 分组折线图

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))
#1 多组折线图
ggplot(data=df2, aes(x=dose, y=len, group=supp)) +
  geom_line()+
  geom_point()
#2 改变直线类型
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)

1的图形结果:

分组折线图1.png

2的图形结果:

分组折线图2.png

四 利用分组改变折线的类型

#1 通过分组改变线的类型
ggplot(df2, aes(x=dose, y=len, group=supp)) +
  geom_line(aes(linetype=supp))+
  geom_point()

#2 通过分组改变线的类型和点的形状
ggplot(df2, aes(x=dose, y=len, group=supp)) +
  geom_line(aes(linetype=supp))+
  geom_point(aes(shape=supp))

1的图形结果:

分组折线图3.png

2的图形结果:

分组折线图4.png

五 使用函数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"))

图形结果:

分组折线图5.png

六 分组改变线的颜色

# 改变线的颜色

p <- ggplot(df2, aes(x=dose, y=len, group=supp)) +
  geom_line(aes(color=supp))+
  geom_point(aes(color=supp))
p

图形结果:

分组折线图6.png

七 利用函数手动改变线的颜色

# 1 自定义调色板
p+scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))
# 2 使用现成的调色板
p+scale_color_brewer(palette="Dark2")
# 3 使用灰度
p + scale_color_grey() + theme_classic()

1的图形结果:

image1.png

2的图形结果:

image2.png

3的图形结果:

image3.png

八 改变折线图的图例默认位置

p <- p + scale_color_brewer(palette="Paired")+
  theme_minimal()
# 1 图例在上方
p + theme(legend.position="top")
# 2 图例在下方
p + theme(legend.position="bottom")
# 3 移除图例
p + theme(legend.position="none")

1的图形结果:

image4.png

2的图形结果:

image5.png

3的图形结果:

image6.png


九 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))

# 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()

图形结果:

image7.png

十 x轴是日期的折线图

head(economics)
ggplot(data=economics, aes(x=date, y=pop))+
  geom_line()

图形结果:

image8.png

十一 带有误差条的折线图

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"))

# 1 均值的标准差
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()


# 2 使用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()

1的图形结果:

误差条1.png

2的图形结果:

误差条2.png

十二 自定义折线图


# 1 简单的折线图
# 通过分组改变点的形状和线的类型
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()

# 2 分组改变颜色和添加误差条
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'))

1的图形结果:

自定义图1.png

2的图形结果:

自定义图2.png

参考资料:

1 ggplot2折线图

登录后方可回帖

信息栏
数据人网是数据人学习、交流和分享的平台,专注于从数据中学习,努力发觉数据之洞见,积极利用数据之价值
Loading...