4、科研作图之折线图——ggplot2

1、一图单线:

1.1基本构图:

一幅图只有简单一种线的情况,这种图的x轴可以使具体的数据,也可以不是数值(如名字,编号等都可以,即因素类型factor);

library(ggplot2)

#数据准备
df = data.frame(
  date = c(1,3,4,6),
  h = c(11.2,13.5,16.1,46)
)

b = ggplot(df, aes(x=date, y=h))
b + geom_line() + geom_point()

 

 细节:

观察以下两种写法的区别:

#写法1

b + geom_line(color = "blue") + geom_point(color = "green", size = 5)

#写法2
b + geom_point(color = "green", size = 5) + geom_line(color = "blue") 

 不难看出,当grom_line写在前面时,线是在点下方的,写在后时,线是在点的上方的。很显然,我们要让点在上方,故要将geom_line写在geom_point之前。这也证实了ggplot2作图的核心理念:图层叠加,写在前的语句就在图层下方。

 1.2添加误差棒:

要实现添加误差棒的操作,我们需要先把数据的sd及mean计算出来。

以下准备的数据为时间与高度关系的数据,其中第1、2、4天测了3组数据,第3天有2组数据,需要计算每天的平均值mean和标准差sd(注意试验要有重复才可能及需要计算sd,若只有一组数据就无误差之谈了)。

library("dplyr")

df = data.frame(
  date = c(1,1,1,2,2,2,3,3,4,4,4),
  h = c(11.2,10,11,15,14.5,16.1,12.1,15.3,20,24,21)
)
df2 = df %>%
  group_by(date) %>%
  summarise(
    sd = sd(h),
    h = mean(h)
  )
df2
b = ggplot(df2, aes(x=date, y=h))+ geom_line()
b  + geom_errorbar(aes(x = date, y = h,
                      ymin = h-sd, ymax = h+sd,
                      width = 0.2
                      )) + geom_point()

 这里引用了一个逻辑包(dplyr,很好用)来进行数据处理,%>%可以看做“然后”的意思。如下面的df2 = ...这以语句解读为:df2等于 df ,然后将df 的数据按date 分组,在然后计算sd 和 mean 分别赋值给sd和h.数据处理结果如下:

2、 一图多线:

这里的数据多了一列type,用于分类多条线,type=1和type=2代表两种类型的线。

如我们的试验是测定一段时间内两种植物的高度,这里两种植物对应type=1和2。

  我们同样需要对数据进行预处理,处理后结果:

df = data.frame(
  date = c(1,1,1,2,2,2,3,3,4,4,4,
           1,1,1,2,2,2,3,3,4,4,4),
  typ = c(1,1,1,1,1,1,1,1,1,1,1,
         2,2,2,2,2,2,2,2,2,2,2),
  h = c(11.2,10,11,15,14.5,16.1,12.1,15.3,20,24,21,
        11.2,14.5,16.1,10,11,15,11.1,14.3,21,22,25)
)

df$typ = factor(df$typ)        #将typ转化为因素
df$date = factor(df$date)

df2 <- df %>%
  group_by(typ, date) %>%
  summarise(
    sd = sd(h),
    h = mean(h)

  )
df2

ggplot()函数添加参数:

  • group 按typ区分不同的线使用的数据(确定y)
  • color 按typ区分不同的线颜色

 b = ggplot(df2, aes(x=date, y=h, group=typ,color = typ))+ geom_line()
b  + geom_errorbar(aes(x = date, y = h,
                       ymin = h-sd, ymax = h+sd,
                       width = 0.2
                                      )) + geom_point(shape = df2$typ,fill = df2$typ )

 

 细节:

若上面为将typ转化为factor则会出现图例出错的现象:

 补充:

线的类型有0-6,使用参数linetype控制,如:geom_line(linetype = 3)

猜你喜欢

转载自blog.csdn.net/qq_52529296/article/details/132001183
今日推荐