我一直坚持这个问题一段时间了。我正在尝试创建一个意大利面条图,其中不同的时间点实际上是不同的变量(或列),因此变量类似于:Test1
,Test2
,Test3
,Test4
其中每个测试是不同的时间点(并且需要在x轴上表示)。我的y轴将是每次测试的测试分数,我需要在4个时间点按照学生的ID绘制。
我尝试在ggplot
中使用interaction.plot
和R
命令,但是当我使用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。
由于机密性问题,我无法发布确切的数据。
答案 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()
答案 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)])