随时间绘制离散变量(围巾图)

时间:2014-03-05 12:46:33

标签: python r matplotlib plot

我有重复测量眼球跟踪实验的时间序列数据。

数据集由多个受访者组成,每个受访者共有48个试验。 数据集有一个变量('扫视'),它是眼睛固定和变量('时间')之间的转换,每个试验的范围为0-1。过渡分为三个不同的类别('ver','hor'和'diag')。

这是一个在python中创建一个小example data set的脚本(一个参与者和两个试验):

import numpy as np
import pandas as pd

saccade1 = np.array(['diag','hor','ver','hor','diag','ver','hor','diag','diag',
'diag','hor','ver','ver','ver','ver','diag','ver','ver','hor','hor','hor','diag',
'diag','ver','ver','ver','ver'])

time1 = np.array(range(len(saccade1)))/float(len(saccade1)-1)

trial1 = [1]*len(time1)

saccade2 = np.array(['diag','ver','hor','diag','diag','diag','hor','ver','hor',
'diag','hor','ver','ver','ver','ver','diag','ver','ver','hor','diag',
'diag','hor','hor','diag','diag','ver','ver','ver','ver','hor','diag','diag'])
time2 = np.array(range(len(saccade2)))/float(len(saccade2)-1)

trial2 = [2]*len(time2)

saccade = np.append(saccade1,saccade2)
time = np.append(time1,time2)
trial = np.append(trial1,trial2)
subject = [1]*len(time)

df = pd.DataFrame(index=range(len(subject)))
df['subject'] = subject
df['saccade'] = saccade
df['trial'] = trial
df['time'] = time

或者我已经制作了一个csv文件,其中包含可以下载的相同数据here

我希望能够制作一个所谓的围巾图,以便随着时间的推移可视化过渡的顺序,但我不知道如何制作这些图。

我想绘制(对于每个参与者分别)时间在x轴上并且试验在y轴上。对于每个试验,我希望转换表示为彩色“堆叠”条。

我对这些情节的唯一例子是“眼睛追踪 - 方法和措施综合指南”(图6.8b)link

有人可以告诉/帮我这么做吗?

(我可以处理哪个python或R编程 - 最好是python)

1 个答案:

答案 0 :(得分:2)

这是使用ggplot2的R中的解决方案。您需要重新编码time2,以便它指示经过的时间而不是总时间。

library(ggplot2)
dataset <- read.csv("~/Downloads/example_data_for_scarf.csv")
dataset$trial <- factor(dataset$trial)
dataset$saccade <- factor(dataset$saccade)
dataset$time2 <- c(0, diff(dataset$time))
dataset$time2[dataset$time == 0] <- 0
ggplot(dataset, aes(x = trial, y = time2, fill = saccade)) + 
    geom_bar(stat = "identity") + 
    coord_flip()

scarf plot

相关问题