2017-06-23 3 views
0

Latticeからxyplot()を使用して、posi(数値)、(文字)から(文字)の3つの列を持つデータフレームによって定義されるプロット矢印。問題:時折、矢印はプロットのスケールを超えます。つまり、プロットウィンドウは、すべてのデータを視覚化するのに十分な大きさではありません。格子のxyplotはY軸上の因子のすべてのレベルを表示しません:不完全なプロット

私は因子レベルを明示的に追加してみましたが、役に立たなかった。より極端なレベル(「D」など)が因子「df $ from」に存在しない場合、それらはプロットウィンドウを描画するためにカウントされないように思われる。私はylimを見ましたが、これは数値に限られています。

私はSOを見渡して、再スケーリング、軸の並び替えに関して多くを見つけましたが、手元の問題を手伝ってくれたものは何もありませんでした。この質問は、@skan:How to plot segments or arrows in 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") 
     } 
) 

enter image description here

私は '古い' の要因と同じデータフレームの最初の3行を、使用レベルはそのままで、プロットは後で「D」レベルが必要になることを考慮していない。

enter image description here

が、私はY軸の制限を設定できるようにしたい、と任意のヘルプやヒントをいただければ幸いです。

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

このプロットになります。

答えて

1

xyplotの呼び出しで "drop.unused.levels = FALSE"を指定すると、問題を回避できます。

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

関連する問題