2017-06-23 3 views
0

Ich verwende xyplot() aus Lattice, um Pfeile zu zeichnen, die durch einen Datenrahmen mit 3 Spalten definiert sind: posi (numerisch), von (Zeichen) bis (Zeichen). Das Problem: Gelegentlich gehen die Pfeile über den Maßstab der Handlung hinaus. Mit anderen Worten, das Diagrammfenster ist nicht groß genug, um alle Daten zu visualisieren.Gitter xyplot zeigt nicht alle Ebenen des Faktors auf der Y-Achse an: unvollständiges Diagramm

Ich habe versucht, die Faktorstufen explizit hinzuzufügen, ohne Erfolg. Es scheint, dass, wenn die extremeren Ebenen (z. B. "D") in dem Faktor "df $ from" nicht vorhanden sind, diese nicht gezählt werden, um das Diagrammfenster zu zeichnen. Ich schaute auf ylim, aber dies ist auf numerische Werte beschränkt.

Ich habe mich auf SO umgeschaut, und fand eine Menge über Neuskalierung, Nachbestellung Achsen, aber nichts, das mir mit dem Problem zur Hand geholfen. Diese Frage bezieht sich auf eine Frage von @skan: How to plot segments or arrows in Lattice.

Meine Daten:

l <- c("A", "B", "C", "D") 
df <- data.frame(posi = c(1, 2, 3, 4, 5), 
       from = factor(c("A", "B", "C", "D", "A"), levels = l, ordered = TRUE), 
       to = factor(c("C", "D", "D", "C", "A"), levels = l, ordered = TRUE) 
) 

Diese Plots wie erwartet:

xyplot(from ~ posi , type="p", col="black", data=df, pch=16, xlim = c(0,7), 
     panel = function(...){ 
     panel.dotplot(x = df$posi, y = df$from, col ="green", cex=1.6) 
     panel.dotplot(x = (df$posi+1), y = df$to, col="black", cex=1.) 
     panel.arrows(x0 = df$posi, y0 = df$from, x1 = df$posi+1, y1 = df$to, lwd=2, col="blue") 
     } 
) 

enter image description here

Wenn ich nur die ersten drei Reihen, von dem gleichen Datenrahmen mit 'altem' Faktor Ebenen intakt, die Handlung berücksichtigt nicht, dass später ein "D" -Niveau benötigt wird.

## only first 3 rows, without element "D" in the factor df$from 
df <- df[1:3, ] 

was zu diesem Grundstück:

enter image description here

ich will, die Grenzen der Y-Achse einstellen zu können und würde jede mögliche Hilfe oder Hinweis zu schätzen wissen.

Antwort

1

Das Problem kann vermieden werden, indem im Aufruf von xyplot "drop.unused.levels = FALSE" angegeben wird.

library(lattice) 

l <- c("A", "B", "C", "D") 
df <- data.frame(posi = c(1, 2, 3, 4, 5), 
      from = factor(c("A", "B", "C", "D", "A"), levels = l, 
          ordered = TRUE), 
      to = factor(c("C", "D", "D", "C", "A"), levels = l, 
         ordered = TRUE)) 


xyplot(from ~ posi , type="p", col="black", data=df, pch=16, xlim = c(0,7), 
    panel = function(...){ 
    panel.dotplot(x = df$posi, y = df$from, col ="green", cex=1.6) 
    panel.dotplot(x = (df$posi+1), y = df$to, col="black", cex=1.) 
    panel.arrows(x0 = df$posi, y0 = df$from, x1 = df$posi+1, y1 = df$to, 
        lwd=2, col="blue") 
    }) 

complete data

df2 <- df[1:3,] 
xyplot(from ~ posi , type="p", col="black", data=df2, pch=16, xlim = c(0,7), 
    drop.unused.levels = FALSE, 
    panel = function(...){ 
    panel.dotplot(x = df2$posi, y = df2$from, col ="green", cex=1.6) 
    panel.dotplot(x = (df2$posi+1), y = df2$to, col="black", cex=1.) 
    panel.arrows(x0 = df2$posi, y0 = df2$from, x1 = df2$posi+1, 
        y1 = df2$to, lwd=2, col="blue") 
    }) 

subset of data with unused factor levels

Verwandte Themen