制作具有不同变量的意大利面条作为时间点

时间:2013-11-07 13:59:47

标签: r plot ggplot2

我一直坚持这个问题一段时间了。我正在尝试创建一个意大利面条图,其中不同的时间点实际上是不同的变量(或列),因此变量类似于:Test1Test2Test3Test4其中每个测试是不同的时间点(并且需要在x轴上表示)。我的y轴将是每次测试的测试分数,我需要在4个时间点按照学生的ID绘制。

我尝试在ggplot中使用interaction.plotR命令,但是当我使用ggplot时,我收到以下错误消息:

  

美学必须是长度一,或与数据相同的长度。

使用interaction.plot命令时,它一直告诉我参数的长度相同。

数据格式为:

   ID Test1 Test2 Test3 Test4  
   1  83    84    67    44  
   2  67    55    58    59  
   3  99    98    98    95 

我需要Test1-4作为时间点,实际得分作为y轴。这些小组将成为ID。

由于机密性问题,我无法发布确切的数据。

3 个答案:

答案 0 :(得分:2)

ggplot中,您的数据需要采用长格式。首先,您需要重塑数据。

library(reshape2)

# melt data from wide to long format
df2 <- melt(df, id.var = "ID")

# plot
ggplot(data = df2, aes(x = variable, y = value, group = ID, colour = factor(ID))) +
  geom_line()

enter image description here

答案 1 :(得分:1)

您也可以使用matplot

# Create some data
df <- data.frame(ID=1:10, Test1=sample(50:100, 10), 
                 Test2=sample(50:100, 10), Test3=sample(50:100, 10))
# Plot it! We remove the ID column, which we don't need to plot
matplot(t(df)[-1,], t="l", lty=1, las=1, ylab="Score", 
        xlab="Test", xaxt="n")
# Use the column labels as axis titles
axis(1, at=1:(ncol(df)-1), labels=names(df)[-1])

答案 2 :(得分:0)

试试这个:

#dummy data
df <- read.csv(text="
ID, Test1, Test2, Test3, Test4
1, 83, 84, 67, 44
2, 67, 55, 58, 59
3, 99, 98, 98, 95
")
#blank plot
plot(0,0,ylim=c(0,100),xlim=c(1,4),bty="n")
#add lines for each ID
for(i in df$ID) lines(1:(ncol(df)-1),
                      df[df$ID==i,2:ncol(df)])

enter image description here