当前位置: 首页>编程语言>正文

grafana绘制多条折线图 ggplot2多条折线图

前言

最近因为论文,需要补充一个分析,在参照前人的文献中,别人有画过这样一个图

grafana绘制多条折线图 ggplot2多条折线图,grafana绘制多条折线图 ggplot2多条折线图_折线,第1张

在前人的研究中,每个block可以划分成5个bin(图中用蓝色线呈现的),外侧灰色带则是误差线。也就是说,每个block内又可以分成一段折线,每个block间也可以画成一条折线(图中黑色线条)。本次画图就是基于前人的图形再结合自己的实验设计,将呈现一个相似的图。

数据准备

本次数据用到的是我自己研究的数据结果,其中包含被试姓名,block,被试反应时等

library(tidyverse)
head(data) #数据类型如下图所示

grafana绘制多条折线图 ggplot2多条折线图,grafana绘制多条折线图 ggplot2多条折线图_图例_02,第2张

在这里,我们首先参照前人文献的做法,将每个block分装出4个bin,每个bin对应于8个trial

#封装bin, 这里我是直接将每8个位置生成一个bin
data <- data %>% 
  group_by(phase, filename) %>% 
  mutate(bin = case_when(  
    row_number() %in% 1:8 ~ 1,
    row_number() %in% 9:16 ~ 2,
    row_number() %in% 17:24 ~ 3,
    row_number() %in% 25:32 ~ 4,    
  ))
  head(data)

grafana绘制多条折线图 ggplot2多条折线图,grafana绘制多条折线图 ggplot2多条折线图_数据_03,第3张

接下来,我们将被试维度平均处理,生成一个条件间的平均值结果。在这里,我使用的是 Rmisc 包的函数,这个包的一个优点是操作简单,并且能够输出se, sd 等统计值。

# 函数可以直接用两个冒号(::)直接调用,而不需要library()包本身
temp_data <- Rmisc::summarySE(data, groupvars = c("phase","bin"),measurevar = "RT" ) %>% 
             na.omit()
# 为了生成画图时的X轴,我额外生成了一个新的变量,命名为X,我会在后面的图中将x的值作为X轴
temp_data <- temp_data %>% 
      mutate(x = row_number())  
head(temp_data)

grafana绘制多条折线图 ggplot2多条折线图,grafana绘制多条折线图 ggplot2多条折线图_折线_04,第4张

画折线图

现在我们将直接用temp_data这个数据进行画图

在该图中,其实我们是将每个block视为不同的处理水平(condition) ,并且通过不同的颜色将其标识出来。而在每个block内部,也就是不同的 bin 之间,我们则是将其视为同一个组。组内通过相同的颜色处理。

#将block设置为分类变量,否则R会默认识别成数值型变量
temp_data$phase <- as.factor(temp_data$phase)
ggplot(temp_data,aes(x = x, y = RT , colour = phase))+ # 我们额外将不同的block添加了颜色属性,以便更好的区分不同的block
  theme_bw() +  # 设置白色背景,个人偏好
  geom_point()+ # 添加折线上的三点
  geom_line()+  # 添加折线,注意折线只在block内存在折线,这是因为我们在添加整个画布时,就将block设置了分组,
  #  所以ggplot认为block内是一个分组,它就将同一个分组内的数据增加了折线
  # 如果需要像原始图中将所有数据点通过折线链接起来,可以设置 geom_line(aes(group = 1))
  geom_ribbon(aes(ymax = RT + se, ymin = RT - se, colour = NA, fill =phase), alpha = 0.1)+ # 添加置信区间,并且去掉线的颜色
  scale_color_brewer(palette="Dark2")+ # 改变整个色系 
  scale_fill_brewer(palette="Dark2")+ # 改变整个色系 
  scale_x_continuous(breaks = c(2.5,6.5,10.5,14.5,18.5,22.5), labels = c(1,2,3,4,5,6))+ # 改变x刻度点的位置
  labs(y = "Reaction Time (ms)", x= "Block")+ #改变坐标轴标签
  theme(legend.position = "none") #删除图例

grafana绘制多条折线图 ggplot2多条折线图,grafana绘制多条折线图 ggplot2多条折线图_折线_05,第5张

实际上,我们也可以根据需求,自由定义我们想要设置的折线组。在定义的过程中,关键是创建标识组间的变量,使得ggplot理解我们是根据哪个变量区分组别的,并且将该组别映射(mapping)到相应刺激属性之上(如线条颜色或填充颜色)

仍以该数据为例,我们仍然可以根据前三个block为一个实验处理,而后三个block则为另一个实验处理。

# 将前三个block设置为 condition1, 后三个block则设置为condition2
temp_data <- temp_data %>% 
  mutate(condition = case_when(
    phase %in% c(1,2,3) ~ "condition1",
    phase %in% c(4,5,6) ~ "condition2"
  ))

temp_data$phase <- as.factor(temp_data$phase)
ggplot(temp_data,aes(x = x, y = RT , colour = condition))+ # 我们额外将不同的block添加了颜色属性,以便更好的区分不同的block
  theme_bw() +  # 设置白色背景,个人偏好
  geom_point()+ # 添加折线上的三点
  geom_line()+  # 添加折线,注意折线只在block内存在折线,这是因为我们在添加整个画布时,就将block设置了分组,
  #  所以ggplot认为block内是一个分组,它就将同一个分组内的数据增加了折线
  # 如果需要像原始图中将所有数据点通过折线链接起来,可以设置 geom_line(aes(group = 1))
  geom_ribbon(aes(ymax = RT + se, ymin = RT - se, colour = NA, fill =condition), alpha = 0.1)+ # 添加置信区间,并且去掉线的颜色
  scale_color_brewer(palette="Set1")+ # 改变整个色系 
  scale_fill_brewer(palette="Set1")+ # 改变整个色系 
  scale_x_continuous(breaks = c(2.5,6.5,10.5,14.5,18.5,22.5), labels = c(1,2,3,4,5,6))+ # 改变x刻度点的位置
  labs(y = "Reaction Time (ms)", x= "Block")+ #改变坐标轴标签
  theme(legend.position = "none") #删除图例

grafana绘制多条折线图 ggplot2多条折线图,grafana绘制多条折线图 ggplot2多条折线图_r语言_06,第6张



https://www.xamrdz.com/lan/54n1926337.html

相关文章: