2015-11-04 3 views
3

Я использовал решетку и решетку дополнительно для построения наблюдаемых и прогнозируемых значений для пяти разных областей. Я использовал xyplot для построения наблюдаемых значений, а затем использовал функцию as.layer в дополнительной решетке для добавления прогнозируемых строк. Я хотел бы добавить легенду на график, но havent повезло.Как добавить легенду к сюжету, сделанному с решеткой и решеткой?

Вот два примера наборов данных и код для графического отображения.

Пример набора данных один. Я включил только две области.

example1 <- 
structure(list(model_predict = c(10, 25, 95, 23, 56, 70, 56, 
45, 25, 50), Shell_Height = c(27, 33, 115, 25, 46, 50, 35, 35, 
23, 45), SAMS_region_2015 = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L), .Label = c("DMV", "LI"), class = "factor")), .Names = c("model_predict", 
"Shell_Height", "SAMS_region_2015"), row.names = c(NA, -10L), class = "data.frame") 

Пример набора данных два. Также включены только две области.

example2 <- 
structure(list(Meat_Weight = c(15, 27, 100, 15, 60, 75, 50, 37, 
28, 60), Shell_Height = c(25, 30, 110, 20, 45, 48, 35, 30, 25, 
50), SAMS_region_2015 = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L), .Label = c("DMV", "LI"), class = "factor")), .Names = c("Meat_Weight", 
"Shell_Height", "SAMS_region_2015"), row.names = c(NA, -10L), class = "data.frame") 

Graphing код

library(lattice) 
library(latticeExtra) 

#observed vs predicted values by SAMS region 

foo<-xyplot(Meat_Weight~Shell_Height|SAMS_region_2015,data=example2, 
     ylab="Meat Weight (g)",xlab="Shell Height (mm)",type="p", 
      col="red",pch=3) 

#add layer of observed values 

foo <- foo + 
     as.layer(xyplot(model_predict~Shell_Height|SAMS_region_2015, 
      type = "l", data = example1, col = "blue", lwd = 4, lty = 3)) 

Я хотел бы добавить легенду для сюжета, который имеет текст Наблюдаемый и Прогнозируемый вместе с символом или линией и цветом, используемым в графике для различных переменных.

R Информация sessionInfo() R версии 3.2.1 (2015-06-18) Платформа: i386-w64-mingw32/i386 (32-разрядная версия) Запуск под: Windows 7 x64 (сборка 7601) Сервис Pack 1

locale: 
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] grid  stats  graphics grDevices utils  datasets 
[7] methods base  

other attached packages: 
[1] latticeExtra_0.6-26 RColorBrewer_1.1-2 nlme_3.1-120  
[4] MASS_7.3-40   xlsx_0.5.7   xlsxjars_0.6.1  
[7] rJava_0.9-6   plyr_1.8.3   RODBC_1.3-12  
[10] lattice_0.20-31  

loaded via a namespace (and not attached): 
[1] tools_3.2.1 Rcpp_0.11.6 

Любая помощь будет принята с благодарностью.

ответ

4

Вы можете просто добавить key= на один из ваших двух xyplot вызовов

xyplot(Meat_Weight~Shell_Height|SAMS_region_2015,data=example2, 
    ylab="Meat Weight (g)",xlab="Shell Height (mm)",type="p", 
    col="red",pch=3, 
    key=list(columns=2, 
     text=list(lab=c("weight","predict")), 
     points=list(pch=c(3,NA), col="red"), 
     lines=list(lty=c(0,3), lwd=4, col="blue"))) + 
as.layer(xyplot(model_predict~Shell_Height|SAMS_region_2015, 
    type = "l", data = example1, col = "blue", lwd = 4, lty = 3)) 

enter image description here

+0

+1 (Единственный недостатком этого варианта является то, что он будет сюжетные линии и точки смещенных друг от друга (а не только в одной колонке), когда ключ устроен «по вертикали».) –

+0

Спасибо вам за ваши предложения. Они оба работали. Я играл с ключевым аргументом, но не мог отобразить разные символы, только текст. – user41509

5

xyplot() «s главный аргумент принимает список параметров, которые будут обрабатывать это довольно красиво. Единственный реальный трюк заключается в том, что если вы включите в список элемент lines, вы можете включить в него его дополнительный элемент type=, в котором элементы будут отображаться как точки и которые как линии.

## Set up a key 
foo_key <- list(x = .97, y = .92, corner = c(1, 1), 
      text = list(c("Observed", "Predicted")), 
      lines = list(type = c("p", "l"), col = c("red", "blue"), 
         pch = 3, lwd = 4, lty = 3)) 

## Then pass it in to xyplot() via its 'key' argument 
foo <- xyplot(Meat_Weight~Shell_Height|SAMS_region_2015,data=example2, 
      ylab="Meat Weight (g)",xlab="Shell Height (mm)", 
      type = "p", col = "red", pch = 3, 
      key = foo_key) 
## ... and carry on with your code, adding a layer and printing the whole thing 
foo <- foo + 
     as.layer(xyplot(model_predict~Shell_Height|SAMS_region_2015, 
      type = "l", data = example1, col = "blue", lwd = 4, lty = 3)) 

foo 

enter image description here

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