2016-03-19 16 views
1

私は、サブセットに対してのみカテゴリが存在するデータセットをプロットするために 'lattice'からdotplot()を使用しようとしていますが、私はscales = list(y = list(relation = "free"))を呼び出して不要な垂直スペーシングを避けます。しかし、これを行うと、アイテム間の垂直方向の間隔が狭くなるようです。それは、エラーが発生したときだけであるため、カテゴリが重複しているかどうかに関係しているようです。格子点内のy値の不一致の間隔

library(lattice) 

variables <- c(rep("Age", 4), rep("Sex", 2), rep("Children", 3)) 
levels <- c(1, 5, 100, 101, "Females", "Males", 2, 3, 90) 
values <- rnorm(9)  

dotplot(levels ~ values | variables, layout = c(1,3), 
     scales = list(y = list(relation = "free"))) 

Imgur

あなたは男性と女性とは問題がないのに対し、例90と3の間の間隔は、オフになっていることをはっきりと見ることができます。ここで、数値が重複しないようにカテゴリを変更すると、正しい間隔が得られます。

levels <- c(1:4, "Females", "Males", 5:7) 

dotplot(levels ~ values | variables, layout = c(1,3), 
     scales = list(y = list(relation = "free"))) 

Imgur

誰もが何が起こっているかと、私はこの問題を解決するために何ができるか知っていますか?

答えて

2

投稿者の機能はlatticedotplot, dropping unused levels of 'y'参照)です。そのポストからDeepayanサルカールを引用

:。。各パネルの小さなサブセットは、常に多かれ少なかれ連続している場合

「、だから、それは基本的に、あなたがrelation="free"/"sliced"を使用することができます少し問題ですが、yはas.numeric(y)となり振る舞います(お互いに近いレベルの面で)、あなたは大丈夫だろう。そうでなければ、あなたが、その場合、あなたはまだあなた自身のprepanelpanel関数を書くことができないだろう、」

dotplot(levels ~ values | variables, layout = c(1,3), 
     scales = list(y = list(relation = "free")), 
     prepanel = function(x, y, ...) { 
      yy <- y[, drop = TRUE] 
      list(ylim = levels(yy), 
       yat = sort(unique(as.numeric(yy)))) 
     }, 
     panel = function(x, y, ...) { 
      yy <- y[, drop = TRUE] 
      panel.dotplot(x, yy, ...) 
     }) 

enter image description here

関連する問題