2012-10-09 12 views
7

Gibt es trotzdem eine Tabelle zu einem Plot hinzuzufügen. Nehmen wir an, dass ich die Handlung unten haben:Eine Matrix zu einem Plot hinzufügen?

curve(dnorm, -3, +4) 

Nun Ich mag eine Matrix unter dem Grundstück hinzuzufügen:

testMat <- matrix(1:20, ncol = 5) 

Mein Ziel? Ich schreibe eine Plot-Funktion, die nicht nur einen Plot erstellt, sondern auch eine Matrix mit den Informationen zeigt, an denen ich interessiert bin.

Bitte sehen Sie sich das beigefügte Bild an, um zu sehen, was ich meine. Ich schätze Ihre Hilfe sehr.

enter image description here

+0

Wenn ich für einen Moment mein Ed Tufte-Kostüm anziehen darf: Ein Graph sollte als Informationslieferant allein stehen. Ich würde empfehlen, die Tabelle der Datenwerte getrennt zu halten (z. B. einen Anhang). Nicht zuletzt erleichtert dies anderen Nutzern das Extrahieren der Zahlen ("Copy and Paste") für den späteren Gebrauch. –

Antwort

7

Es gibt wahrscheinlich bessere Möglichkeiten, dies zu tun, aber eine Option könnte eines der Pakete zu verwenden, dass „Plots“ Matrizen und Datenrahmen, wie die "gplots" package.

Hier ist ein sehr einfaches Beispiel (Sie können wahrscheinlich dies für viel feinere Kontrolle über das endgültige Layout anpassen).

# Some sample data 
testMat <- matrix(1:20, ncol = 5) 
testMatDF <- as.data.frame(testMat) 
names(testMatDF) <- c("Hey there", "Column 2", 
         "Some * Symbols", "And^More", 
         "Final Column") 
rownames(testMatDF) <- paste("Group", 1:4) 

# Load the package 
library(gplots) 
# Set par for plotting a three-row plot 
par(mfrow = c(3, 1)) 
curve(dnorm, -3, +4) 
textplot(testMat) 
textplot(testMatDF) 

Das Ergebnis:

enter image description here

Sie auch layout() statt par(mfrow...) verwenden können, wenn Sie ein wenig mehr kreativ mit der Platzierung Ihrer Plots erhalten möchten. Zum Beispiel:

layout(matrix(c(1, 1, 2, 3, 3, 3), 
       2, 3, byrow = TRUE)) 
curve(dnorm, -3, +4) 
textplot(testMat) 
textplot(testMatDF) 

enter image description here

+0

Hallo @Mrdwab, Tahnks für Ihre Antwort. Ich habe ein kleines Problem mit textplot(). Meine Matrix hat 5 Spalten und zeigt nur die ersten zwei Spalten. Gibt es trotzdem, dass ich den Abstand zwischen Spalten reduzieren kann? – Sam

+0

@Sepehr, siehe '? Textplot' und suche nach' cmar' und 'rmar', um den Spalten- und Zeilenabstand anzupassen. Ich bin mir nicht sicher, warum Sie das beschriebene Problem haben, ohne eine Probe Ihrer Daten zu sehen. Anders als der Spaltenabstand könnte ein anderer Grund die Größe Ihrer anfänglichen Zeichenfläche sein; Wenn das Diagrammfenster zu klein ist, werden möglicherweise einige Daten abgeschnitten. Ich hoffe, das hilft! – A5C1D2H2I1M1N2O1R2T1

+0

Ich schätze Ihre Hilfe sehr. – Sam

7

Paket plotrix bietet Funktion addtable2plot.

Beispiel aus der Hilfedatei:

library(plotrix) 
testdf<-data.frame(Before=c(10,7,5),During=c(8,6,2),After=c(5,3,4)) 
rownames(testdf)<-c("Red","Green","Blue") 
barp(testdf,main="Test addtable2plot",ylab="Value", 
    names.arg=colnames(testdf),col=2:4) 
# show most of the options 
addtable2plot(2,8,testdf,bty="o",display.rownames=TRUE,hlines=TRUE, 
       title="The table") 

Edit: Legen Sie die Tabelle in einem neuen Grundstück es unter Ihrem Grundstück zu platzieren.

library(plotrix) 

layout(matrix(c(1,2), 2, 1, byrow = TRUE), 
     widths=c(1,1), heights=c(2,1)) 


testdf<-data.frame(Before=c(10,7,5),During=c(8,6,2),After=c(5,3,4)) 
rownames(testdf)<-c("Red","Green","Blue") 
barp(testdf,main="Test addtable2plot",ylab="Value", 
    names.arg=colnames(testdf),col=2:4) 

plot.new() 
addtable2plot(0,0,testdf,bty="o",display.rownames=TRUE,hlines=TRUE, 
       title="The table") 
+0

Ich schaute auch auf 'addtable2plot()', aber es schien mühsam, den Tisch dort zu positionieren, wo ich wollte. Es scheint abhängig von der Größe des Plot-Fensters. Können Sie Ihre Antwort mit einem Beispiel aktualisieren, das dem entspricht, nach dem das OP gesucht hat (mit anderen Worten, wo sich die Tabelle unterhalb des Plots und nicht innerhalb des Plots befindet)? – A5C1D2H2I1M1N2O1R2T1

+0

@mrdwab Ich zeige eine Möglichkeit, wie das zu erreichen ist. – Roland

+0

genial. Viel bessere Antwort jetzt. +1 – A5C1D2H2I1M1N2O1R2T1

Verwandte Themen