13 Stimmen

Hinzufügen von zusätzlichen Abständen zwischen einer Untergruppe von Plots

Ich versuche, 6 Zahlen in einem Bild auszugeben, in einem 3x2-Layout. Ich möchte zwischen der obersten und den beiden untersten Zeilen einen zusätzlichen Abstand einfügen. Ist dies mit R möglich? Ich habe die Dokumentation für par und plot durchgesehen und kann keine entsprechende Option finden.

Hier ist ein Beispielcode:

a = rnorm(100,100,10)
b = rnorm(100,100,10)

par(mfrow=c(3,2), oma=c(1,1,1,1), mar=c(2,2,2,2))
hist(a)
hist(b)
plot(a,b)
plot(a,b)
plot(a,b)
plot(a,b)

Dieser Code gibt Folgendes aus:


alt text


Hier ist die gewünschte Ausgabe (ich habe dieses Bild in einem externen Editor geändert). Beachten Sie den zusätzlichen Abstand zwischen der oberen und unteren Zeile.


alt text


10voto

Dirk Eddelbuettel Punkte 345316

El layout() Funktion ist Ihr Freund. Sie könnten zum Beispiel eine Plot-Matrix definieren

1 2
3 4
5 6
7 8

und dann leere Parzellen für die dritte und vierte. Oder bleiben Sie einfach bei sechs und nennen Sie par um einen zusätzlichen Abstand am unteren Rand hinzuzufügen.

9voto

nico Punkte 49590

Ich kann mir drei Möglichkeiten vorstellen:

1) Verwenden Sie die mar grafischer Parameter zur Einstellung des Plotrands

Sie können die aktuellen Spannen mit

currmar <- par()$mar

Sie können neue Ränder festlegen mit

par("mar"=c(5, 4, 4, 2))

wobei die Zahlen für den unteren, linken, oberen und rechten Rand stehen (siehe ?par )

Sie können mehrere Anrufe tätigen an par für jedes Diagramm, so dass Sie den unteren Rand nur für die oberen Diagramme ändern können.

2) Verwenden Sie Layout, um ein ungleichmäßiges Layout-Raster zu erzeugen (siehe ?layout für Beispiele)

3) Speichern Sie das Diagramm im .svg- oder .pdf-Format und verwenden Sie dann Inkscape (oder eine andere Software), um die Diagramme zu verschieben.

4voto

Henrik Punkte 13884

Ich denke, dass wir mit mar würde ich es so machen. So wie es aussieht, wollen Sie jedoch, dass alle Parzellen gleich sind. Daher müssen Sie den gleichen Betrag von mar auf jeder Fläche oben und unten abgezogen haben.
In Ihrem Fall könnte man die folgenden Zahlen verwenden:
1. Zeile: par(mar=c(7,4,4,2))
2. Reihe: par(mar=c(5,4,6,2))
3. Zeile: par(mar=c(7,4,4,2))

Auf diese Weise nehmen alle Parzellen die gleiche Höhe ein. Ändern Sie die erste und die dritte Zahl so, dass sie für jede Fläche gleich sind, um dies zu erreichen. Allerdings gibt es eine Einschränkung: Unter den Flächen in der untersten Reihe befindet sich etwas zusätzlicher weißer Raum.

1voto

Christoph Punkte 6521

Zu den Plots gibt es nichts hinzuzufügen, aber ich habe mich mehrmals mit dem Layout herumgeschlagen, daher hier eine Möglichkeit, das Layout zu visualisieren (aus aquí ) - unter Verwendung von Base-R:

# Margins area
par(oma=c(3,3,3,3)) # all sides have 3 lines of space
par(mar=c(5,4,4,2) + 0.1) # mar=c(b,l,t,r)

# Plot
plot(0:10, 0:10, xlab="X", ylab="Y") # type="n" hides the points

# Place text in the plot and color everything plot-related red
text(5,5, "Plot", col="red", cex=2)
box(col="red")

# Place text in the margins and label the margins, all in forestgreen  
mtext("Margins", side=3, line=2, cex=2, col="forestgreen")  
mtext("par(mar=c(b,l,t,r))", side=3, line=1, cex=1, col="forestgreen")  
mtext("Line 0", side=3, line=0, adj=1.0, cex=1, col="forestgreen")  
mtext("Line 1", side=3, line=1, adj=1.0, cex=1, col="forestgreen")  
mtext("Line 2", side=3, line=2, adj=1.0, cex=1, col="forestgreen")  
mtext("Line 3", side=3, line=3, adj=1.0, cex=1, col="forestgreen")  
box("figure", col="forestgreen")  

# Label the outer margin area and color it blue  
# Note the 'outer=TRUE' command moves us from the figure margins to the outer margins.  
mtext("Outer Margin Area", side=1, line=1, cex=2, col="blue", outer=TRUE)  
mtext("par(oma=c(b,l,t,r))", side=1, line=2, cex=1, col="blue", outer=TRUE)  
mtext("Line 0", side=1, line=0, adj=0.0, cex=1, col="blue", outer=TRUE)  
mtext("Line 1", side=1, line=1, adj=0.0, cex=1, col="blue", outer=TRUE)  
mtext("Line 2", side=1, line=2, adj=0.0, cex=1, col="blue", outer=TRUE)  
box("outer", col="blue")  

mtext("Line 0, side=2", side=2, line=0, adj=0.0, cex=1, col="blue", outer=TRUE)
mtext("Line 1, side=2", side=2, line=1, adj=0.0, cex=1, col="blue", outer=TRUE)
mtext("Line 0, side=3", side=3, line=0, adj=0.0, cex=1, col="blue", outer=TRUE)
mtext("Line 1, side=3", side=3, line=1, adj=0.0, cex=1, col="blue", outer=TRUE)
mtext("Line 0, side=4", side=4, line=0, adj=0.0, cex=1, col="blue", outer=TRUE)
mtext("Line 1, side=4", side=4, line=1, adj=0.0, cex=1, col="blue", outer=TRUE)

Ergebnis: enter image description here


Mit zwei Parzellen:

par(mfrow = c(2, 1))
# First plot
# Margins area
par(oma=c(3,3,3,3)) # all sides have 3 lines of space
par(mar=c(5,4,4,2) + 0.1) # mar=c(b,l,t,r)

# Plot
plot(0:10, 0:10, xlab="X", ylab="Y") # type="n" hides the points

# Place text in the plot and color everything plot-related red
text(5,5, "Plot", col="red", cex=2)
box(col="red")

# Place text in the margins and label the margins, all in forestgreen  
mtext("Margins", side=3, line=2, cex=2, col="forestgreen")  
mtext("par(mar=c(b,l,t,r))", side=3, line=1, cex=1, col="forestgreen")  
mtext("Line 0", side=3, line=0, adj=1.0, cex=1, col="forestgreen")  
mtext("Line 1", side=3, line=1, adj=1.0, cex=1, col="forestgreen")  
mtext("Line 2", side=3, line=2, adj=1.0, cex=1, col="forestgreen")  
mtext("Line 3", side=3, line=3, adj=1.0, cex=1, col="forestgreen")  
box("figure", col="forestgreen")  

# Label the outer margin area and color it blue  
# Note the 'outer=TRUE' command moves us from the figure margins to the outer margins.  
mtext("Outer Margin Area", side=1, line=1, cex=2, col="blue", outer=TRUE)  
mtext("par(oma=c(b,l,t,r))", side=1, line=2, cex=1, col="blue", outer=TRUE)  
mtext("Line 0", side=1, line=0, adj=0.0, cex=1, col="blue", outer=TRUE)  
mtext("Line 1", side=1, line=1, adj=0.0, cex=1, col="blue", outer=TRUE)  
mtext("Line 2", side=1, line=2, adj=0.0, cex=1, col="blue", outer=TRUE)  
box("outer", col="blue")

mtext("Line 0, side=2", side=2, line=0, adj=0.0, cex=1, col="blue", outer=TRUE)
mtext("Line 1, side=2", side=2, line=1, adj=0.0, cex=1, col="blue", outer=TRUE)
mtext("Line 0, side=3", side=3, line=0, adj=0.0, cex=1, col="blue", outer=TRUE)
mtext("Line 1, side=3", side=3, line=1, adj=0.0, cex=1, col="blue", outer=TRUE)
mtext("Line 0, side=4", side=4, line=0, adj=0.0, cex=1, col="blue", outer=TRUE)
mtext("Line 1, side=4", side=4, line=1, adj=0.0, cex=1, col="blue", outer=TRUE)

# Second plot
plot(0:10, 0:10, xlab="X", ylab="Y", ) # type="n" hides the points

# Place text in the plot and color everything plot-related red
text(5,5, "Plot", col="red", cex=2)
box(col="red")

# Place text in the margins and label the margins, all in forestgreen  
mtext("Margins", side=3, line=2, cex=2, col="forestgreen")  
mtext("par(mar=c(b,l,t,r))", side=3, line=1, cex=1, col="forestgreen")  
mtext("Line 0", side=3, line=0, adj=1.0, cex=1, col="forestgreen")  
mtext("Line 1", side=3, line=1, adj=1.0, cex=1, col="forestgreen")  
mtext("Line 2", side=3, line=2, adj=1.0, cex=1, col="forestgreen")  
mtext("Line 3", side=3, line=3, adj=1.0, cex=1, col="forestgreen")  
box("figure", col="forestgreen")  
par(mfrow = c(1, 1))

Ergebnis: enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X