2012-11-26 23 views
14

Jestem nowy w kreśleniu w R, więc proszę o pomoc. Powiedz, że mam następującą matrycę.Jak wykreślić następujące w R?

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 

że chce wykreślić tego, gdzie oś x zawiera co rowname (a, b, c), a na osi y, to wartość każdej rowname (a = 1 do 4, b = 2 i 5, c = 3 i 6). Każda pomoc będzie doceniona!

|  o 
| o x 
| o x 
| x 
|_______ 
    a b c 
+4

BTW, dobra praca na czytanie linki dałem wam i przepisywanie pytanie w znacznie lepszej formie. Jak widać poniżej z poniższych odpowiedzi i twoich uptów, wypłacono dywidendy! :) – joran

+0

Wezmę to :) Dziękuję za wskazówki. – Stephen

Odpowiedz

12

Oto jeden ze sposobów grafika zastosowaniem zasady:

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 zawierać inny symbol kreślenia

+0

Czy istnieje sposób na pionowe ułożenie etykiet osi X? – Stephen

+0

@ user1854603 Czy masz na myśli etykiety osi y? W przeciwnym razie jestem pewien, co masz na myśli. – joran

+1

@ user1854603 Rozgrywka z argumentem 'las', takim jak to:' plot (1: 3, las = 1); fabuła (1: 3, las = 2) 'i tak dalej do' las = 4'. (FWIW, 'axis()' również bierze argument "lasy".) –

10

matplot() został zaprojektowany do danych w tej właśnie formie:

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

+2

... a możesz zrobić to samo, co ja z 'xaxt' i' axis', aby oznaczyć oś X literami. – joran

+0

@joran - Dobrze. Dodałem to i czapkę z kapeluszem do ciebie. –

+0

Więc coś jak 'matplot (mat1, xaxt = 'n'); oś (1, at = 1: nrow (mat1), labels = rownames (mat1)); ' – user295691

3

Można to zrobić w grafice bazowych, ale jeśli masz zamiar używać R o wiele więcej niż to myślę, że warto poznawać pakiet ggplot2. Zauważ, że ggplot2 przyjmuje tylko ramki danych - ale często lepiej jest przechowywać dane w ramkach danych niż w macierzach.

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

6

I wreszcie rozwiązanie kratownica

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

+0

+1 dla ubogiej starej zaniedbanej sieci - co wciąż uważam za najlepsze narzędzie do eksploracji danych dla wykresów. –

+0

@ AriB.Friedman - Dla mojej osobistej edukacji, co kraty mają ponad ggplot jako narzędzie do eksploracji danych? –

+1

@ DrewSteen Uważam, że składnia jest nieco bardziej intuicyjna w krojeniu i wycinaniu danych. 'ggplot' ma' qplot', ale wciąż znajduję funkcje sieciowe szybciej, aby dodać grupowanie według koloru i grupowanie przez kratek. Również półpasiec jest genialny: 'dfmat <- data.frame (x = seq (18), y = seq (18), z = rep (seq (3), 6), a = runi (18)); xyplot (współczynnik x + y ~ (z) | equal.count (a, 3), data = dfmat) ' –

Powiązane problemy