4

I have the following input file for R:

car    1
car    2 
car    3 
car2   1 
car2   2 
car2   3 

I then use the following commands to plot my graph:

autos_data <- read.table("~/Documents/R/test.txt", header=F)

dotchart(autos_data$V2,autos_data$V1)

But this plots each car and car2 value on a new line, how can I plot the chart so that all the car values are on one line and all the car2 values are on another line.

Community
  • 1
  • 1
Harpal
  • 12,057
  • 18
  • 61
  • 74

3 Answers3

5

Note that you can add dots to a dotchart with ?points, so this can be done in base R with a little bit of data management. Here's how it could be done:

autos_data = read.table(text="car    1
car    2 
car    3 
car2   1 
car2   2 
car2   3", header=F)

aData2 = autos_data[!duplicated(autos_data[,1]),]

dotchart(aData2[,2], labels=aData2[,1], 
         xlim=c(min(autos_data[,2]), max(autos_data[,2])))
points(autos_data[,2] , autos_data[,1])

enter image description here

@Josh O'Brien's lattice solution is more elegant, of course.

gung - Reinstate Monica
  • 11,583
  • 7
  • 60
  • 79
5

As far as I can tell, there's just no way to do that with base dotchart.

However, if a lattice dotplot suits your needs as well, you can just do:

library(lattice)
dotplot(V1~V2, data=autos_data)

enter image description here

Josh O'Brien
  • 159,210
  • 26
  • 366
  • 455
1

Here's a ggplot2 solution

qplot(V1, V2, data=autos_data) + coord_flip()

enter image description here

Whitebeard
  • 5,945
  • 5
  • 24
  • 31