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)