gpt4 book ai didi

python - 绘制离散变量随时间变化的图(围巾图)

转载 作者:行者123 更新时间:2023-12-01 05:21:30 25 4
gpt4 key购买 nike

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

该数据集由多个受访者组成,每个受访者有 48 项试验。该数据集有一个变量(“扫视”),它是眼睛注视之间的转换,还有一个变量(“时间”),每次试验的范围为 0-1。转换分为三个不同的类别(“ver”、“hor”和“diag”)。

这是一个脚本,它将创建一个小的 example data set在Python中(一名参与者和两次试验):

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)

最佳答案

这是使用 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

关于python - 绘制离散变量随时间变化的图(围巾图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22198222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com