2017-02-14 6 views
0

У меня возникают трудности с сюжетом легенды:R функция базового участка: неправильная легенда для графа

head(bee.ground) 
    X Month Treatment Block Bee_Richness Bee_Abundance Bare Grass Forb Dead Moss 
1 1 May  DS  1   0    0 23.20 15.72 37.80 17.00 0 
2 2 May  GS  1   0    0 33.52 21.88 33.60 9.88 0 
3 3 May  UB  1   1    1 0.60 18.28 35.00 43.48 0 
4 4 May  DS  2   7   71 11.20 11.20 58.80 16.68 0 
5 5 May  GS  2   5    6 37.00 12.08 43.92 5.12 0 
6 6 May  UB  2   5   16 4.40 14.88 12.32 67.88 0 

    shape<-as.numeric(as.factor(bee.ground$Block)) 
    color<-as.numeric(as.factor(bee.ground$Treatment)) 

    plot(bee.ground$Bare, bee.ground$Bee_Richness, main = "Bee Richness and Bare Ground Cover", 
xlab = "Percent Bare Ground", ylab = "Bee Richness", 
pch = shape, 
col = color, 
las = 1, 
cex = 1.5) 

test graph

Это хороший график, я получаю, что я думаю, что черный DS, красный - GS, а зеленый - UB для лечения. Блоки (четыре разные формы) кажутся правильными. Однако, когда я делаю легенду с этими же параметрами, я получаю это: legend's in the top corner...

legend("topleft", 
    pch = shape, 
    col = color, 
    legend = c("Block 1","Block 2","Block 3","Block 4", NA, "DS","GS","UB")) 

Все это делает, повторяя форму трижды с разными цветами, а соответствие с тем, что (я думаю) график показывает. Я попробовал функцию слияния, но это не исправило проблему (она создает ту же неправильную легенду).

~ Есть ли способ в функции построения графика, чтобы легенда находилась под графиком и центрирована? EDIT: Я понял это! просто скорректировал ylim, чтобы перейти на -3 и оставить пространство для горизонтальной легенды.

~ Возможно, другое; как я конкретно назначаю каждому лечению определенный цвет, а каждый блок - конкретную фигуру, вместо того, чтобы позволить R использовать только первые несколько параметров?

Благодарим за помощь!

EDIT: Я закончил создание двух отдельных легенд, чтобы различать между блоками и обработками.

shape <- ifelse(bee.ground$Block == "1", 1,ifelse(bee.ground$Block == "2", 2, ifelse(bee.ground$Block == "3",3,4))) 
color <- ifelse(bee.ground$Treatment == "DS", 'red',ifelse(bee.ground$Treatment == "GS", 'green', 'black')) 

plot(bee.ground$Bare, bee.ground$Bee_Richness, main = "Bee Richness and Bare Ground Cover", 
    xlab = "Percent Bare Ground", ylab = "Bee Richness",pch = c(shape), 
    col = c(color),las = 1,cex = 1.5,ylim = c(0,35)) 
legend("topleft", c('1','2','3','4'),pch = c(1,2,3,4),horiz = TRUE,title = "Block") 
legend("topright",c("DS","GS","UB"),horiz = TRUE, text.col = c("red","green","black"),title = "Treatment",title.col = "black") 

ответ

0

Возможно, это может помочь. Я задал формы и цвета, которые я хотел для plot, и для legend.

shape <- as.numeric(as.factor(bee.ground$Block)) 
color <- as.numeric(as.factor(bee.ground$Treatment)) 

plot(bee.ground$Bare, bee.ground$Bee_Richness, 
    main = "Bee Richness and Bare Ground Cover", 
    xlab = "Percent Bare Ground", ylab = "Bee Richness", 
    pch = shape, col = color, las = 1, cex = 1.5) 

    legend("topleft", c('Block DS, Treatment 1', 
         'Block DS, Treatment 2', 
         'Block DS, Treatment 3', 
         'Block GS, Treatment 1', 
         'Block GS, Treatment 2', 
         'Block GS, Treatment 3', 
         'Block UB, Treatment 1', 
         'Block UB, Treatment 2', 
         'Block UB, Treatment 3'), 
         pch = c(1,1,1,2,2,2,3,3,3), 
         col = c('blue', 'green', 'brown', 
           'blue', 'green', 'brown', 
           'blue', 'green', 'brown')) 


shape <- ifelse(bee.ground$Block == 'DS', 3, 
     ifelse(bee.ground$Block == 'GS', 6, 9)) 

color <- ifelse(bee.ground$Treatment == 1, 'red', 
     ifelse(bee.ground$Treatment == 2, 'blue', 'black')) 

plot(bee.ground$Bare, bee.ground$Bee_Richness, 
    main = "Bee Richness and Bare Ground Cover", 
    xlab = "Percent Bare Ground", ylab = "Bee Richness", 
    pch = shape, col = color, las = 1, cex = 1.5) 

    legend("topleft", c('Block DS, Treatment 1', 
         'Block DS, Treatment 2', 
         'Block DS, Treatment 3', 
         'Block GS, Treatment 1', 
         'Block GS, Treatment 2', 
         'Block GS, Treatment 3', 
         'Block UB, Treatment 1', 
         'Block UB, Treatment 2', 
         'Block UB, Treatment 3'), 
         pch = c(3,3,3,6,6,6,9,9,9), 
         col = c('red', 'blue', 'black', 
           'red', 'blue', 'black', 
           'red', 'blue', 'black')) 
+0

Спасибо! Я внес некоторые изменения в мой оригинальный пост :) – Brenna

Смежные вопросы