I have the following data:
subject = c("S01","S02","S03","S04","S05","S06","S07","S08","S09","S10")
post = c(100,80,75,120,85,90,95,90,110,100)
pre = c(45,60,80,75,45,60,55,50,35,40)
data1 = as.data.frame(cbind(subject, post, pre))
Then I sorted the data based on the post column:
data1 = data1[order(data1$post),]
What I want to have in the end is a scatter plot comparing the post and pre columns, in different colors accordingly. The X axis is simply the index of the data frame, but labeled with the subject number, so the axis label will be in the order of subject number since the data frame is sorted by the post column
If I do this:
plot(data1$post)
What I have is a bar chart, not even a scatter plot. Is this cause by the post column being a factor? I tried "as.numeric" for both post and pre columns, but the result is the same
If I do this:
plot(data1$post,data1$pre)
I have a scatter plot, but the index goes from 1 to 20. So instead of having a comparison scatter on the same index 1 to 10, I have two scatters with index from 1-10 and 11-20.
Any help to point out my mistakes will be greatly appreciated.
It is not really correct to call this a "scatterplot"; one of the variables is categorical and the values are paired. It's really a variant of a dotplot. The practice of using as.data.frame(cbind(.))
has created a data monstrosity.
> data1
subject post pre
1 S01 100 45
10 S10 100 40
9 S09 110 35
4 S04 120 75
3 S03 75 80
2 S02 80 60
5 S05 85 45
6 S06 90 60
8 S08 90 50
7 S07 95 55
And all those columns are factors rather than numeric as was clearly intended:
Use this code instead:
data1 = data.frame(subject=subject, post=post, pre=pre)
data1 = data1[order(data1$post),];
plot(data1$pre,type="p",ylim=range(data1$pre,data1$post),
xaxt="n", ylab="Pre/Post Scores: black=Pre, red=Post")
points(data1$post,col='red')
axis(1, at=1:10, labels=levels(data1$subject)[order(post)])
That last line could have been:
axis(1, at=1:10, labels=as.character(data1$subject))) # since the set was sorted by `post`
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With