2012-04-30 33 views
14

Ich verwende R und Latex zusammen, um einige Diagramme zu zeichnen und versuche, eine gemeinsame Legende für alle von ihnen zu erstellen.Gemeinsame Legende für mehrere Plots in R

Ich habe sechs separate Plots auf der gleichen Seite. Ich habe jedes Diagramm einzeln in R erstellt und dann auf der gleichen Seite mit \ includegraphics in Latex angezeigt.

Jedes Diagramm hat die gleichen Legendeninformationen. Daher möchte ich, anstatt eine Legende in jedem Diagramm zu haben, eine horizontale Legende am unteren Rand der Seite anzeigen. Leider kann ich nicht herausfinden, wie man eine Legende ohne eine Handlung macht. Sobald ich ein separates Bild für die Legende habe, werde ich wissen, wie man es am unteren Ende der Seite mit Latex einfügt.

Der Code, den ich verwenden werde versuchen, die Legende zu machen ist

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) 

Aber die Schrift ist zu klein, und die Seite der Legende abgeschnitten wird.

+0

Wenn alle Plots Basis R-Funktionen verwenden, können Sie es leichter haben mit "Layout" alles in einem Plot in R platzieren. – joran

Antwort

5

die Sie interessieren,

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

Der obige Code erzeugt eine Legende, die zu groß ist - Sie können nur die Mitte von ihr sehen und die Seiten sind abgeschnitten. Selbst wenn ich die Datei exportiert und sie wieder geöffnet habe, hatte ich nicht die vollständige Legende. – user1288578

+0

das hängt von Ihrer Schriftgröße und Gerätebreite ab. Vielleicht möchten Sie sich die Legenden ansehen, die "gitter" erzeugen kann, sie sind vielleicht etwas schlauer, wenn es darum geht, die verschiedenen Schlüssel voneinander zu trennen. (Sie müssten 'gridBase' verwenden, um die Legende in Basisplots hinzuzufügen). – baptiste

22

Ein einfaches Beispiel, was ich sprach:

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

können Sie 'par (mar = c (0,0,0,0))' hinzufügen oder die Ränder vor dem Hinzufügen der Legende anderweitig zurücksetzen – MichaelChirico