Jay
Jay

Reputation: 751

How do I plot the following in R?

I'm new to plotting in R so I ask for your help. Say I have the following matrix.

mat1 <- matrix(seq(1:6), 3)
dimnames(mat1)[[2]] <- c("x", "y")
dimnames(mat1)[[1]] <- c("a", "b", "c")
mat1
  x y
a 1 4
b 2 5
c 3 6

I want to plot this, where the x-axis contains each rowname (a, b, c) and the y-axis is the value of each rowname (a = 1 and 4, b = 2 and 5, c = 3 and 6). Any help would be appreciated!

|     o
|   o x
| o x
| x
|_______
  a b c

Upvotes: 14

Views: 429

Answers (4)

Matthew Lundberg
Matthew Lundberg

Reputation: 42629

And finally, a lattice solution

library(lattice)
dfmat <- as.data.frame(mat1)
xyplot( x + y ~ factor(rownames(dfmat)), data=dfmat, pch=c(4,1), cex=2)

enter image description here

Upvotes: 6

joran
joran

Reputation: 173517

Here's one way using base graphics:

plot(c(1,3),range(mat1),type = "n",xaxt ="n")
points(1:3,mat1[,2])
points(1:3,mat1[,1],pch = "x")
axis(1,at = 1:3,labels = rownames(mat1))

enter image description here

Edited to include different plotting symbol

Upvotes: 12

Josh O&#39;Brien
Josh O&#39;Brien

Reputation: 162311

matplot() was designed for data in just this format:

matplot(y = mat1, pch = c(4,1), col = "black", xaxt ="n",
        xlab = "x-axis", ylab = "y-axis")
axis(1, at = 1:nrow(mat1), labels = rownames(mat1))             ## Thanks, Joran

enter image description here

Upvotes: 10

Drew Steen
Drew Steen

Reputation: 16607

You could do it in base graphics, but if you're going to use R for much more than this I think it is worth getting to know the ggplot2 package. Note that ggplot2 only takes data frames - but then, it is often more useful to keep your data in data frames rather than matrices.

d <- as.data.frame(mat1) #convert to a data frame
d$cat <- rownames(d) #add the 'cat' column
dm <- melt(d, id.vars)
dm #look at dm to get an idea of what melt is doing

require(ggplot2)
ggplot(dm, aes(x=cat, y=value, shape=variable)) #define the data the plot will use, and the 'aesthetics' (i.e., how the data are mapped to visible space)
  + geom_point() #represent the data with points

enter image description here

Upvotes: 3

Related Questions