2012-04-30 21 views
14

Używam R i Latex razem, aby narysować kilka fabuł i staram się stworzyć wspólną legendę dla nich wszystkich.Wspólna legenda dla wielu działek w R

Mam sześć oddzielnych działek na tej samej stronie. Zrobiłem każdą działkę osobno w R, a następnie wyświetliłem je na tej samej stronie używając \ includegraphics w Latex.

Każdy wykres zawiera te same informacje, legendy, więc zamiast legendą w każdym poletku chciałbym mieć jedną legendę poziomą na wyświetlaczu na dole strony. Niestety nie mogę wymyślić, jak stworzyć legendę bez fabuły. Kiedy mam już osobny obraz legendy, będę wiedział, jak umieścić go na dole strony za pomocą Latex.

Kod Próbuję użyć do legendy jest

plot(1, type = "n", axes=FALSE, xlab="", ylab="") 
plot_colors <- c("blue","black", "green", "orange", "pink") 

legend(.6,1.3,legend = c("Fabricated Metal", "Iron and Steel", "Paper", 
"Beverages", "Tobacco"), 
     col=plot_colors, lwd=5, cex=.5, horiz = TRUE) 

Ale czcionka jest zbyt mała, a boczne okna legendy jest odcięta.

+0

Jeśli wszystkie działki używać funkcji zasady R może być łatwiej umieszczając je wszystkie na jednym wykresie w R używając 'layout'. – joran

Odpowiedz

5

Spróbuj tego,

plot_colors <- c("blue","black", "green", "orange", "pink") 
text <- c("Fabricated Metal", "Iron and Steel", "Paper", 
"Beverages", "Tobacco") 
plot.new() 
par(xpd=TRUE) 
legend("center",legend = text, text.width = max(sapply(text, strwidth)), 
     col=plot_colors, lwd=5, cex=1, horiz = TRUE) 
par(xpd=FALSE) 
+0

Powyższy kod tworzy legendę, która jest zbyt duża - widać tylko jej środek, a boki są odcięte. Nawet gdy wyeksportowałem plik i ponownie go otworzyłem, nie miałem pełnej legendy. – user1288578

+0

, które zależą od rozmiaru czcionki i szerokości urządzenia. Możesz rzucić okiem na legendy, które "kratownica" może wytworzyć, mogą być nieco bardziej sprytne w rozstawieniu różnych klawiszy. (aby dodać legendę na bazowych wykresach, musisz użyć 'gridBase'). – baptiste

22

Prostym przykładem tego, co mówiłam o:

m <- matrix(c(1,2,3,4,5,6,7,7,7),nrow = 3,ncol = 3,byrow = TRUE) 

layout(mat = m,heights = c(0.4,0.4,0.2)) 

for (i in 1:6){ 
    par(mar = c(2,2,1,1)) 
    plot(runif(5),runif(5),xlab = "",ylab = "") 
} 


plot(1, type = "n", axes=FALSE, xlab="", ylab="") 
plot_colors <- c("blue","black", "green", "orange", "pink") 
legend(x = "top",inset = 0, 
     legend = c("Fabricated Metal", "Iron and Steel", "Paper","Beverages", "Tobacco"), 
     col=plot_colors, lwd=5, cex=.5, horiz = TRUE) 

enter image description here

+2

możesz dodać 'par (mar = c (0,0,0,0))' lub w inny sposób zresetować marginesy przed dodaniem legendy – MichaelChirico